软件工程课程设计报告Socket聊天系统
c#实现网络聊天室(socket)仿QQ课程设计【范本模板】

Visual C#程序设计课程设计(报告)题目:网络聊天室专业班级:地信131学生姓名:胡宏勇学号:1220130912完成时间:_________ 2015.7。
12______________________任务书项目四网络聊天室4。
1、目的与要求1. 目的:1)要求学生达到熟练掌握.NET基本结构以及C#语言的基本知识和技能;2)基本掌握面向对象程序开发的基本思路和方法;3)掌握网络程序开发的基本知识;4)能够利用所学的基本知识和技能,进行简单的网络通信程序设计。
2。
要求基本要求:1)要求利用C#的编程思想以及套接字开发原理来完成系统的设计;2)突出C#语言与其它语言不同点(即体现C#的高级功能,如属性概念、接口、事件、委托等);3)体现可视化编程基本东西,如系统带有菜单、工具栏、状态栏以及一些常用的高级控件。
创新要求:在基本要求达到后,可进行创新设计,如加入文件传输功能,以及远程控制功能。
4.2、信息描述有关该系统基本信息的描述,如:客户端实例的信息等。
类似于QQ。
4.3、功能描述1。
聊天室服务器端的创建。
2。
聊天室客户端的创建.3。
实现客户与服务器的连接通讯。
4. 实现客户之间的私聊。
5。
实现客户端的在线信息显示.6。
实现服务器端当前在线客户信息.7. 保存谈话记录。
4.4、解决方案1. 首先进行需求分析,搞清楚系统功能和任务.2. 然后总体设计中确定模块结构,划分功能模块,将软件功能需求分配给所划分的最小单元模块。
确定模块间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略.3。
详细设计中为每个模块确定采用的算法,选择适当的工具表达算法的过程(流程图),描述模块的详细过程;确定每一模块使用的数据结构;确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口。
4. 依据分析编写C#代码。
目录1.需求分析—— - - - —— - - — - — - —— - - - — - 11。
软件工程课程设计方案Socket聊天系统

目录1.前言 (1)2.需求分析 (2)2.1系统的功能需求 (2)................................................................................................................................... 错误!未定义书签。
................................................................................................................................... 错误!未定义书签。
................................................................................................................................... 错误!未定义书签。
................................................................................................................................... 错误!未定义书签。
................................................................................................................................... 错误!未定义书签。
2.2非功能需求: (2)................................................................................................................................... 错误!未定义书签。
“基于Socket的网络聊天系统的设计与实现”课程设计报告

《计算机网络课程设计报告》学院:计算机科学学院专业:计算机科学与技术班级:08级01班姓名:学号:小组成员:ABCDEF2011-7-13项目内容:基于Socket的网络聊天系统的设计与实现实验目的:基于Socket套接口,实现网络聊天系统的设计与实现,让我们掌握Socket的编程技术及网络服务的技术,让同学们更加深刻的了解,并掌握这方面的知识。
实验环境:操作系统:windows2000或windows2003;内存:256M以上;基于eclipse的JAVA运行环境。
设计方案:首先,我们知道此应用软件需实现网络中多台主机的信息互通,实现语言文字得互聊,因此涉及到主机网络互联的问题,所以必须会应用到网络协议,可以用UDP或TCP。
其次,既然要求设计基于Socket的网络聊天系统,那就必须对Socket有一个充分的了解。
最后,不管运用何种语言设计此程序,都要求对该语言有一个透彻的了解,并能运用自如。
实现流程:启动电脑,打开能运行该程序的环境,必须保证代码的正确性;进行窗体框架的设计,实现网络连接,并达到网络聊天的功能;在以上步骤的成功进行下达到设计要求的基于S o c k e t s的局域网内聊天系统的函数实现的目的。
结果及分析:程序运行以后,经过局域网内测试,实现了在局域网内的好友添加,聊天等功能,基本上完成了本实验的全部要求。
但由于时间仓促,再加上本人水平有限,对这方面的知识还有所欠缺,经过这次课程设计,对此有了一个很大的提高。
源程序;一 Client端程序代码package wangluo;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import javax.swing.JFrame;import javax.swing.JTextField;public class Client implements ActionListener {private JTextField jtf = new JTextField("", 20);JFrame jf = new JFrame("不用注册直接登陆");public Client() {jf.setLayout(new BorderLayout());jf.add(jtf, BorderLayout.NORTH);jtf.addActionListener(this);jf.pack();jf.setLocation(500, 300);jf.setResizable(false);jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}@Overridepublic void actionPerformed(ActionEvent e) {jf.dispose();new ThreadClient(jtf.getText());}public static void main(String[] args) {new Client();}}二ThreadClient端程序代码:package wangluo;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import .Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;public class ThreadClient extends Thread implements ActionListener { private String name = "";private int a;private JTextField jtf = new JTextField("", 25);private JTextArea jta = new JTextArea(30, 40);private DataOutputStream dos;private DataInputStream dis;private Socket s;public ThreadClient(String temp) {=temp;JFrame jf = new JFrame("聊天界面");jf.setLayout(new BorderLayout());JButton jb = new JButton("发送");JPanel jp = new JPanel();jta.setLayout(new GridLayout(1, 2));jp.add(jtf);jp.add(jb);jf.add(jp, BorderLayout.NORTH);jf.add(jta);jb.addActionListener(this);jtf.addActionListener(this);jf.pack();jf.setLocation(450, 200);jf.setVisible(true);jf.setSize(400, 350);try {s = new Socket("127.0.0.1", 1024);dos = new DataOutputStream(s.getOutputStream());dis=new DataInputStream(s.getInputStream());dos.writeUTF("<1.1>");dos.writeUTF(name);System.out.println("heh");} catch (Exception e) {e.printStackTrace();}jf.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {try {dos.writeUTF("<1.4>");Thread.sleep(2000);dis.close();dos.close();s.close();} catch (Exception e1) {e1.printStackTrace();}System.exit(1);}});this.start();}@Overridepublic void run() {while(true){try {Thread.sleep(3000);dos.writeUTF("<1.3>");jta.setText(dis.readUTF());} catch (Exception e) {break;}}}@Overridepublic void actionPerformed(ActionEvent ae) { String comn=jtf.getText();if(!"".equals(comn)){try {dos.writeUTF("<1.2>");dos.writeUTF(comn);jtf.setText("");jtf.requestFocus();} catch (Exception e) {e.printStackTrace();}}}}三ThreadServer端程序代码:package wangluo;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .ServerSocket;import .Socket;public class ThreadServer extends Thread {//private StringBuffer message = new StringBuffer();private static String message="";private Socket s;private String name="";public ThreadServer(Socket s) {this.s = s;}public void run() {try {DataOutputStreamdos=new DataOutputStream(s.getOutputStream());DataInputStream dis=new DataInputStream(s.getInputStream());while (true) {String temp=dis.readUTF();if("<1.1>".equals(temp)){name=dis.readUTF();message="欢迎"+name+"进入!"+"\n"+message;}else if("<1.2>".equals(temp)){message=name+"说:"+dis.readUTF()+"\n"+message;}else if("<1.3>".equals(temp)){dos.writeUTF(message);}else if("<1.4>".equals(temp)){message=name+"离开"+"\n"+message;break;}}dos.close();dis.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(1024);while (true) {Socket s = ss.accept();new ThreadServer(s).start();}}}安装演示说明详细步骤:首先将自己所在电脑作为服务器端,在JAVA环境下运行该程序,出现以下页面:再在光标所示位置输入用户名称,或直接按回车键进入聊天界面:再将其他主机作为客户端,与服务器所在的主机进行连接,成功后界面如下:在输入框中输入要发送的信息,点击发送如上所示,本实验演示完毕。
网络编程课程设计报告AndroidSocket聊天室

网络编程课程设计报告课程名称 java程序设计之网络编程题目 Android Socket 聊天室专业信息管理与信息系统班级组长副组长组员指导教师目录5.一、设计目的随着人们对手机的依赖程度越来越深和人们相互之间的交流越来越多,开发一款手机聊天软件便显得尤为重要。
我组开发的手机聊天软件-Android Socket 聊天室不仅可以让人们相互之间的交流变得越来越便捷,而且通过对Android Socket 聊天室的开发,使得我们能更好的掌握网络编程知识,锻炼自己的java编程能力。
二、开发工具和开发环境1、开发工具: Eclipse2、开发环境:JDK三、设计原理1、实现思想Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。
一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。
2、服务器端工作流程(1)创建服务器端套接字并绑定到一个端口上(2)套接字设置监听模式等待连接请求(3)接受连接请求后进行通信(4)返回,等待赢一个连接请求3、客户端工作流程(1)创建客户端套接字(指定服务器端IP地址与端口号)(2)连接(Android 创建Socket会自动连接)(3)与服务器端进行通信(4)关闭套接字四、系统流程图五、系统设计本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端,每多个客户端服务器端就会相因的创建一个线程,它们之间通过这个连接来实现数据通信;然后在客户端设置一个监听器,用于监听服务器发来的消息。
并根据消息做出不同的动作。
1、系统功能该系统实现了用户之间的点对点单人聊天,在线用户之间的群聊。
在客户端和服务器端都可以查看历史消息、保存消息、清空消息。
为了监控用户之间的状态,服务器还可以实现踢掉用户的功能,同时用户时间文件传输的信息都会在服务器上显示。
2、系统架构1)选择传输控制协议TCP,使用Java的Socket编程机制,分别建立客户端与服务器端;2)分别设计客户端与服务器端的界面,客户端使用的是用安卓开发界面。
基于Socket的网络聊天程序设计报告

学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称高性能计算机网络实验题目基于Socket的网络聊天程序设计指导老师姓名学生姓名学生专业班级2011 —2012 学年第一学期实验课程名称:高性能计算机网络第一部分:实验分析与设计一、实验内容描述(问题域描述)内容:综合运用网络协议、编程语言、API和图形界面实现基于socket建立、监听、连接、发送数据和接收数据的网络通信程序。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)本程序采用基于面向无连接的UDP协议。
需要用到的函数有bind()、 sendto()、 recvfrom()等设计一个基本的网络服务器有以下几个步骤:1、初始化Windows Socket2、创建一个监听的Socket3、设置服务器地址信息,并将监听端口绑定到这个地址上4、开始监听5、接受客户端连接6、和客户端通信7、结束服务并清理Windows Socket和相关数据,或者返回第4步客户端程序框架类似三、主要仪器设备及耗材Windows XP 操作平台Microsoft Visual C++ 6.0 开发环境第二部分:实验调试与结果分析一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)上机前编写好代码,用VC 6.0 编译时发现出现链接错误二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)经分析,应该在“工程”-“设置”-“连接”下的“对象/库模块”中添加“ws2_32.lib”在运行时应该先启动服务器端程序,再启动客户端程序。
源代码以及运行结果截图见附页。
三、实验小结、建议及体会通过本次实验,巩固了自己的编程能力,把课堂上学习到的通信协议用到了实践中,对于各种通信协议的理解很有好处。
不足的的对于图形界面编程能力不足,今后应该在这方面多多下功夫。
服务器端代码:#include <stdio.h>#include <WINSOCK2.H>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData );if (err != 0 ){return;}if (LOBYTE(wsaData.wVersion) != 1 ||HIBYTE(wsaData.wVersion) != 1){WSACleanup();return;}SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6666); //设置端口号为6666 bind(sockSrv, (sockaddr*)&addrSrv, sizeof(sockaddr));char sendBuf[100];char recvBuf[100];char tempBuf[200];int len = sizeof(sockaddr);SOCKADDR_IN addrClient;while(1){recvfrom(sockSrv, tempBuf, strlen(tempBuf), 0,(sockaddr*)&addrClient, &len);if('q' != tempBuf[0]){sprintf(recvBuf, "%s say: %s", inet_ntoa (addrClient.sin_addr), tempBuf);printf("%s\n", recvBuf);printf("please input your data: ");gets(sendBuf);sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (sockaddr*) &addrClient, len);}else // 若接收到'q',则退出聊天{printf("%s request to quit the chat platform.\n",inet_ntoa(addrClient.sin_addr));sendto(sockSrv, "q", strlen("q") + 1, 0, (sockaddr*)&addrClient, len);break;}}closesocket(sockSrv);WSACleanup();}客户端代码:#include <stdio.h>#include <WINSOCK2.H>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData);if (err != 0){return;}if(LOBYTE(wsaData.wVersion) != 1 ||HIBYTE(wsaData.wVersion) != 1 ){WSACleanup();return;}SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//htonl htons inet_addr inet_ntoaaddrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6666); //设置同样的端口号6666 char sendBuf[100];char tempBuf[200];char recvBuf[100];int len = sizeof(sockaddr);while(1){printf("please input your data: ");gets(sendBuf);sendto(sockClient, sendBuf, strlen(sendBuf) + 1, 0, (sockaddr*)&addrSrv, len);recvfrom(sockClient, tempBuf, strlen(tempBuf), 0, (sockaddr*)&addrSrv, &len);if('q' != tempBuf[0]){sprintf(recvBuf, "%s say: %s", inet_ntoa(addrSrv.sin_addr), tempBuf);printf("%s\n", recvBuf);}else // 若接收到'q',则退出聊天{printf("the server has been closed!\n");sendto(sockClient, "q", strlen("q") + 1, 0, (sockaddr*)&addrSrv, len);break;}}closesocket(sockClient);WSACleanup();}运行结果截图:。
聊天系统程序设计实践报告

程序设计实践设计报告课题名称:网络聊天程序的设计和实现学生姓名:班级:班内序号:学号:日期:1.课题概述1.1课题目标和主要内容课题实现的主要内容:本程序实现一个简单的网络聊天程序,采用客户机/服务器(Client/Server)模式,将客户端和服务端功能在一个程序中实现,运行时在不同的计算机上打开此程序即可进行聊天。
程序实现一对多,多对多聊天功能,满足聊天的基本功能。
课题目标:学会使用MFC搭建基本的对话框及基本控件的使用,了解socket套接字相关知识,实现简单聊天程序。
通过实践复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力。
使用的开发平台:Microsoft Visual Studio 2010、windows7采用的主要工具:计算机、相关图书资料1.2系统的主要功能功能列表或功能框图,以及功能的简要说明。
服务器端负责指定ip地址及端口号,建立服务器,有监听、接受、发送消息等功能。
客户端通过指定的ip及端口号来连接服务器,有接受和发送消息等功能。
2. 系统设计2.1 系统总体框架包括系统框架图或层次逻辑图,设计思想等首先由服务器在指定的端口开通指定的服务,然后在客户机通过指定服务器地址、端口来连接服务器以获得指定的服务。
服务器端首先由一个服务器启动一个线程监听来自客户器的Socket连接,当服务器的Socket与客户器的Socket经过TCP协议的3次握手建立了连接后,双方就可以通过这个连接来进行信息的发送和接收,并可以进行文件的传输。
在进行程序设计时,对于多个用户连接服务器采用了多线程处理,每个客户端的Socket都启动一个线程来连接服务端的Socket,服务端的Socket接受连接后,通过一个结构体保存已经连接的客户端的地址和套接字,当客户端发送一个信息到服务端,服务器接收信息后,再从结构体中取出已保存的套接字转发所收到的信息。
客户端由客户端的Socket提出连接请求,要连接的目标是服务器端的Socket。
基于Linux的socket网络编程聊天工具课程设计
*****《软件综合开发案例教程》课程设计报告课程设计题目小组成员:**,**,**,**任课讲师和助教:**,**2014年 10 月 29 日摘要这个课程设计整体采用在linux平台下,在同一局域网内实现聊天功能。
整体框架主要分为服务端和客户端两个部分,设置好ip和端口号,在Linux下编译和调试两主大块程序,实现服务端和客户端的连接,然后以服务端作为中继转实现客户端之间的通信。
使用socket网络编程采用TCP/IP协议保证连接可靠,并在项目管理中采用linux流行的gcc和makefile编译,提高了编译和调试效率,加快了项目的完成速度。
本次设计的聊天工具采用字符串命令行的方式进行通信,主要实现了五个功能:用户之间一对一的聊天、编辑、换行、用户之间聊天记录保存、聊天记录调取。
经过测试,程序运行可靠,能满足在linux中实现网络聊天的要求。
关键词 linux,socket,gedit,服务端,客户端,网络编程AbstractThe course design of the overall use in the Linux platform, within the same LAN chat functions.Overall framework consists of server and client two parts, set up IP and port number, two main large program under Linux compiling and debugging, to connect server and client, and then turn to the server as a relay to realize the communication between the e the socket network programming using TCP/IP protocol to ensure reliable connect, and using Linux popular GCC in project management and compile a makefile, improve the efficiency of the compiling and debugging, to speed up the completion of the project.The design way of chat tool USES the string on the command line to communicate, has realized the five main functions: the one-on-one chat between users, editing, line feeds, chat records, chat records obtained between users.After testing, the program runs, reliable and can meet the requirements of the implementation in the Linux network chat. Keywords Linux, socket, gedit, server, client, network programming目录摘要 (II)Abstract (II)第一章绪论.......................................................................................... - 1 -1.1、背景......................................................................................... - 1 -1.2、网络聊天的发展状况 ............................................................ - 1 -1.3、Linux系统............................................................................ - 2 -1.3.1 、Linux的简介............................................................... - 2 -1.3.2 、Linux发展历程........................................................... - 3 - 第二章系统应用技术 ......................................................................... - 4 -2.1 、socket概念及功能 ............................................................... - 4 -2.2、socket类型 ........................................................................... - 5 -2.3 、socket函数 ........................................................................... - 5 -2.3.1 、API功能介绍.............................................................. - 5 -2.3.2、套接口地址结构 ........................................................... - 7 -2.3.3、基本转换函数 ............................................................... - 8 -2.3.4、socket编程流程 ............................................................ - 8 -2.4、TCP/IP 协议......................................................................... - 10 -2.4.1、协议概述 ..................................................................... - 10 -2.4.2、TCP/IP层次结构 ........................................................ - 10 - 第三章需求分析 ............................................................................... - 13 -3.1 、功能需求 ............................................................................ - 13 -3.2、性能需求 .............................................................................. - 13 -3.3 、模块划分 ............................................................................ - 13 -3.3.1、界面需求设计 ........................................................... - 14 -3.3.2 、通信需求 ................................................................... - 14 -3.3.3 、数据存储 ................................................................... - 14 -3.4、系统总流程图 ...................................................................... - 14 - 第四章系统测试 ............................................................................... - 15 -4.1、测试说明 .............................................................................. - 15 -4.2、模块测试 .............................................................................. - 15 -4.3、测试结果分析 ...................................................................... - 16 - 第五章设计和实现 ........................................................................... - 16 -5.1、窗体的设计 .......................................................................... - 16 -5.2、实现服务器与客户端的连接 .............................................. - 17 -5.3、聊天功能 .............................................................................. - 18 -5.4、编辑功能的实现 .................................................................. - 19 -5.5、换行功能的实现 .................................................................. - 20 -5.6、数据库的创建与连接 .......................................................... - 21 -5.6.1、MySQL数据库的简介 ............................................... - 21 -5.6.2、MYSQL环境搭建 ...................................................... - 21 -5.7 、显示聊天记录 .................................................................... - 23 -结论................................................................................................ - 25 - 致谢................................................................................................ - 26 -第一章绪论1.1、背景随着Internet的快速发展和普及,网络已经遍布世界各个角落。
基于socket的网络聊天室
《JA V A程序设计》课程设计报告院系题目基于socket 的Client/Server监听模式学生姓名学生学号专业班级指导教师完成时间(空2行)目录1 需求分析 (1)2 系统设计……………………………………………………………………Y 2.1 界面模块设计…………………………………………………………Y 2.2 用户客户端登录验证设计……………………………………………Y 2.3服务器模块设计…………………………………………………………Y 2.4客户端模块设计…………………………………………………………Y2.5数据传输加密设计…………………………………………………………Y3 实现……………………………………………………………………Y 3.1 界面模块实现…………………………………………………………Y 3.2 用户客户端登录验证实现……………………………………………Y 3.3服务器模块实现…………………………………………………………Y 3.4客户端模块实现…………………………………………………………Y 3.5 数据传输加密实现…………………………………………………………YX ×××××(正文第X章)…………………………………………………Y 结论………………………………………………………………………………Y 参考文献…………………………………………………………………………Y 附录A 源代码(必须)………………………………………………………Y正文部分:1 需求分析现在网络通信应用的很广泛,几乎所有应用都基于网络实现通信。
而要实现异地的网络通信,尤其是C/S结构的软件,使用套接字的网络编程是实现双方通信的基础。
本课程设计就是基于Java TCP客户端和服务器、UDP组播实现的群聊。
1.1 基本功能需求以下三点是本课程设计的基础功能实现,即要完成基本的客户端-服务器的连接通信。
聊天类程序实验报告
一、实验目的1. 熟悉Python编程语言的基本语法和常用库。
2. 掌握网络编程的基本原理和TCP/IP协议。
3. 学习使用socket编程实现客户端和服务器端的数据交互。
4. 提高团队协作能力和编程实践能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 开发工具:PyCharm4. 网络环境:局域网或互联网三、实验内容本次实验设计了一个简单的聊天类程序,包括客户端和服务器端。
客户端用于发送和接收消息,服务器端用于接收客户端发送的消息并广播给所有客户端。
1. 服务器端程序服务器端程序负责监听客户端的连接请求,接收客户端发送的消息,并将消息广播给所有已连接的客户端。
```pythonimport socketimport threading# 定义服务器地址和端口server_address = ('localhost', 12345)# 创建socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定地址和端口server_socket.bind(server_address)# 设置最大连接数server_socket.listen(5)print("服务器启动,等待客户端连接...")def broadcast_message(message, clients):"""将消息广播给所有已连接的客户端"""for client in clients:try:client.send(message.encode('utf-8'))except:client.close()clients.remove(client)def handle_client(client_socket, clients):"""处理客户端连接"""while True:try:message = client_socket.recv(1024).decode('utf-8') if message:broadcast_message(message, clients)else:breakexcept:break# 存储所有已连接的客户端clients = []try:while True:client_socket, client_address = server_socket.accept()print(f"连接成功,客户端地址:{client_address}")clients.append(client_socket)client_thread = threading.Thread(target=handle_client, args=(client_socket, clients))client_thread.start()except KeyboardInterrupt:print("服务器关闭")finally:server_socket.close()```2. 客户端程序客户端程序负责连接服务器,发送和接收消息。
基于Socket的聊天程序
JAVA程序设计课程设计报告课题: 基于Socket的聊天程序姓名:骑蚂蚁去流浪学号:0213同组姓名:专业班级:计科0912班指导教师:刘国清设计时刻:2012年上学期第01周评阅意见:评定成绩:指导老师签名:年月日目录一、前言 (2)二、课题概述 (2)(一)课题概述 (3)(二)相关技术 (3)三、系统设计 (3)(一)需求分析 (4)(二)系统功能 (5)(三)系统架构 (6)(四)模块设计 (7)四、详细设计与实现 (8)(一)服务端设计 (8)(二)客户端设计 (9)(三)辅助类设计 (10)五、系统运行结果 (11)六、结论与总结 (13)(一)课程设计结论 (13)(二)课程设计总结与体会 (14)七、附录 (15)一、前言Java课程设计是运算机科学与技术专业学生必做的集中实践性环节之一,是学习完《Java程序设计》课程后进行的一次全面的综合练习。
其目的在于通过课程设计,能够取得较系统的技术训练,从而巩固和加深对Java 编程的基础理论知识的理解,提高综合运用所学理论解决实际问题的能力,成为具有扎实的运算机理论基础和较强的独立动手能力的复合型、应用型人材。
二、课题概述、课题概述现今社会,网络技术愈来愈进展,能够说,二十一世纪就是网络的世纪。
网络迅猛进展,势不可挡。
为了实现资源共享,各式各样的网站进展迅速,各类各样的聊天工具不断更新。
本次课程设计选择一个以JAVA语言实现一个基于Socket的网络聊天室程序。
本系统提供一个网络交互平台,各用户之间能够实时方便的传递信息,能够在聊天室里实现群聊。
本系统主如果利用JAVA语言基于Socket通信机制制作的一个聊天室,采用的是客户/服务器。
二层的C/S结构是指以单一的服务器和局域网为核心,能通过客户端与用户进行直接对话。
为利用户能直观地进行操作,一般要利用图形用户接口(GUI),操作简单、易学易用。
在变更用户接口时,只需改写显示控制和数据检查程序,而不影响其他。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1.前言 (4)2.需求分析 (5)系统的功能需求 (5)点歌 (5)分组管理 (5)个人信息管理 (5)…用户管理 (5)视频通话 (5)非功能需求: (5)网络安全 (5)用例分析 (6)参与者 (6)用例分析 (6)系统的用例图 (6)^3.总体设计 (8)服务器设置 (8)分析类图 (9)顺序图 (10)用户私聊顺序图 (10)用户传送文件序列图 (11)协作图 (11)用户私聊协作图 (11)>用户传送文件协作图 (12)4.详细设计 (14)客户端设计 (14)服务端设计 (14)多线程设计 (15)5.代码实现 (16)服务端设计 (16)客户端设计 (18)—多线程 (22)服务端多线程 (22)客户端多线程 (24)6.运行与测试 (25)用户登录界面 (25)输入端口界面 (25)服务器记录,在线的用户信息。
(26)私聊 (26)#登录 (26)用户给指定的好友发送信息。
(私聊) (27)指定好友接受到好友信息。
(私聊的信息) (27)好友回复我的信息 (28)群聊 (28)发送群消息 (28)好友响应并接受群聊信息 (29) (29)|7. 小结 (30)8.参考文献 (31)…1.前言-随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。
目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。
该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。
前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。
后者通过与服务器建立连接,来进行客户端与客户端的信息交流。
其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。
开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。
在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。
经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统本文通过java的Socket实现了一个基于局域网和网络的聊天室的程序的开发---基于java的C/S 模式网络聊天室的设计与实现。
C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发展方向。
关键词:聊天客户端信息服务器端Java C/S聊天系统》2.需求分析系统的功能需求实现私聊(一对一):在登陆的情况下选择你要聊天的好友,进行信息的传送,实现彼此的聊天,这也是本系统最基本的功能。
群聊(一对多):可以实现一对多人的聊天。
大文件传输:在能够聊天的基础上,实现通讯的多元化,进行文件的传输。
是通讯双方可以选择传送对方想获得的资料。
$点歌分组管理个人信息管理用户管理视频通话非功能需求:界面友好:界面易操作性,对经典的聊天程序的界面进行了学习和借鉴,模仿他们的界面和常用的操作。
网络安全加密解密为了提高传输的安全性,进行加密操作。
及时在网络上被别人了窃听消息,也不能得到原始信息,防止个人重要信息和隐私信息被盗。
用例分析参与者本系统显而易见的两个参与者:用户和管理员。
用例分析从上面的需求里进行抽象和提取关键信息,在确定系统边界的情况下,选择最基本的用例,然后对用例进行描述和细化。
使其能完全的描述系统的功能性需求。
[系统的用例图通过对参与者和用例的分析,确定他们的关系(包括参与者和参与者的关系,参与者和用例的关系,用例之间的关系。
)其中用例之间的关系是分析中的重点,如图私聊和群聊都有socket聊天的模块,所以可以确定的是包含关系。
管理个人信息,包含了分组管理和用户信息管理,其中分组管理和用户信息管理,是个人信息管理的子集,所以应该是泛化关系。
在文件传输的时候,可能会产生信息的丢失,导致信息不完整,接收方不能完整收到发送方的消息,所以导致发送方重发信息。
所以这是扩展关系,因为只有在传输文件失败的时候,才能启用重传文件的模块。
用户所参与的模块首先应该登录,在登录系统后,可以私聊和群聊来交流信息。
用户可以管理自己的信息进行修改自己的信息和管理自己的分组。
为了丰富系统的功能我,我们还特意实现了点歌功,和传输文件吸引用户的眼光。
^3.总体设计服务器设置在T C P / I P协议族中,有两个互不相同的传输协议: T C P(传输控制协议)和U D P(用户数据报协议)。
T C P为两台主机提供高可靠性的数据通信。
它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。
由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面, U D P则为应用层提供一种非常简单的服务。
它只是把称作数据报的分组从一台主机发到另一台主机,但并不保证该数据报能到达另一端。
任何必需的可靠性必须由应用层来提供。
服务器和客户机通讯流程分析类图;(系统整齐的分析类图)没有类是单独存在的,通常和别的类协作,创造比单独工作更大的语义。
因此,除了捕获系统的词汇以外,还要将注意力集中到这些类是如何在一起工作的。
使用类图来表达这种协作。
确定你建模的机制。
机制代表了部分你建模的系统的一些功能和行为,这些功能和行为是一组类、接口和其他事物相互作用的结果。
对于每个机制,确定类、接口和其他的参与这个协作的协作。
同时确定这些事物之间的关系。
用场景来预排这些事物,沿着这条路你将发现模型中忽略的部分和定义错误的部分。
确定用这些事物的内容来填充它们。
对于类,开始于获得一个责任(类的职责),然后,将它转化为具体的属性和方法。
顺序图用户私聊顺序图》用户在进入系统前首先要输入彼此通讯的端口号,由于客户机和服务器都是本机所以不需要寻找IP地址,然后输入用户名新建一个用户,由于没有保存历史记录功能,所以每次进入系统前都需要新建一个用户。
然后输入用户名和密码,在确认用户和密码。
登陆成功,选择在线可以聊天的好友,输入信息然后发送,达到和好友的交流。
用户传送文件序列图协作图用户私聊协作图】强调的是发送和接收消息的对象之间的组织结构。
一个协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。
对象通常是命名或匿名的类的实例,也可以代表其他事物的实例。
用户传送文件协作图·用户在登录系统后,进入登陆界面,在界面的好友框里,选择要传送文件的好友,点击传送文件的按钮,会弹出选择文件的对话框,在对话框里查找你所在的文件系统中你要传送的文件。
然后点击传送。
$4.详细设计客户端设计~一个网络聊天室的运行,首先是要有一个完整稳定的服务器端,并且拥有很多个服务器端。
客服端要具有实现用户注册和用户登陆,在登陆成功后,要显示出公聊界面,实现聊天功能并且能够发送表情和保存聊天内容和显示聊天记录等功能,在新用户上线和用户下线时要更新每个客户端在线用户列表名,并且可以和在线的用户实现一对一的私聊功能。
在服务器端可以实现不断的监听客服的连接,并且根据客户端发送过来的不同信息如注册信息,登录信息,公聊信息,私聊信息,退出信息等,服务器端要做出不同的响应,并且要实现数据库的操作,如根据用户注册的信息保存数据库中,根据登录时发送来的用户名和密码检测是否合法用户等。
经为每一个连接着的客户端建立了一个线程,这个线程好比一根电话线一直等待客户端说话,而信息发送中心就相当于一个总台,一旦有人打电话进来,就通过电话线把信息传完成了服务器端的第一个的任务,那么第二个任务也就不难解决了。
上面已送到总台,再由总台根据需要将这个信息发送给接收群。
这样就意味着,服务器每接受一条信息,就要调用一次信息发送中心的方法,并将这条信息发送到所有客户端(或者特定的某个/某几个客户端)。
电脑每做的一次动作,一个步骤,都是按照以经用计算机语言编好的程序来执行的,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。
所以人们要控制计算机一定要通过计算机语言向计算机发出命令。
侦听服务器发送的连接请求,有请求就接收发来的信息,并通过短信猫发出去单的说,服务器端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据等等.客户端可以是任意的一台电脑,只要它和服务器端存在连接,并且得到了服务器端的授权,就可以使用服务器端的服务.象现在就可以理解为百度的网站是服务器端,我们现在使用的电脑就是客户端.我们可以使用它的服务.服务端设计由于客户端需要同时能够接收信息以及发送信息,所以也必须利用多个线程来实现。
主线程用于接收用户输入的内容并将之发送到服务器端,而一个后台线程将一直接收来自服务器端的信息,并将之返回给客户端的用户。
客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。
除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。
因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。
对于这一类应用程序,需要网络中有相应的服务器和服务程序来提供相应的服务,如数据库服务,电子邮件服务等等,这样在客户机和服务器端,需要建立特定的通信连接,来保证应用程序的正常运行。
'不过客户端及伺服端的关系不见得一定建立在两台分开的机器上,同一台机器中也有这种主从关系的存在。
提供服务的伺服端及接受服务的客户端也有可能都在同一台机器上,例如我们在提供网页的服务器上执行浏览器浏览本机所提供的网页,这样在同一台机器上就同时扮演伺服端及客户端。
多线程设计为了能实现一对多的通话聊天也就是说间接的多对多的聊天的功能,所以必须在客户端配置和服务端配置的时候。
实现多线程的功能。
实现程序的并发。
以及可以减少创建进程是CPU的资源浪费。