基于CS的简单聊天程序2012211466宋余保
- 格式:doc
- 大小:755.50 KB
- 文档页数:19
基于C\S结构的聊天室系统摘要计算机网络的迅速发展,对人类社会诸多领域产生了巨大的影响。
尤其是,随着信息时代的来临,人们之间愈来愈趋向于通过网络来交流和传递信息。
而聊天系统正是当前人们使用最多的中介。
在这个平台上,许多认识或不认识的人们彼此间能够随意的相互交交流。
因此,开发和架构这种平台符合时代发展的需要。
论文首先对目前国内国际方面的状况进行初步的介绍,接下来详细的介绍了本设计用到的主要技术及相关内容,以下按照软件工程的思想对系统进行调研,技术可行性分析,需求分析及总体设计与功能模块划分。
接着是详细设计按照不同的模块有侧重的分析,诸如客户端与服务器的通讯,客户端与客户端的通讯,涉及到本设计主要的流程,用流程图加以说明,并有文字说明。
本设计主要采用了黑盒测试与其他设计相结合的方法。
主要测试系统是否能完成基本的功能,当输入错误的信息时,提示信息是否合理;发送信息、接收信息是否按预想的设计进行;界面的合理、整洁性。
黑盒测试是从用户的角度出发的一种比较好的测试方法。
本设计分为四章,第一、二章是绪论与文献综述,介绍了本课题的来源背景、研究和解决的问题以及对社会发展的作用。
第三、四章提出了解决问题的方案以及提出具体的方法实现该系统的功能,这两章是最重要的部分。
第五章是本设计的结果与评价,对此系统在整体上进行测试,并做出客观的评价。
最后是致谢和参考文献,对此设计有帮助的人表示感谢以及自己所参考的重要文献。
关键词聊天系统;TCP/IP协议;JSPAbstractThe rapid development of the computer networks has been making a great influence in many fields of human society. In particular, along with information age approaching, people tend to increasingly communicate and transmit information through the network. But the chat system is precisely used by people as an intermediary. On this platform, people can chat each other at random whether they know or not. Therefore, this kind of platform developed and constructed conforms to demanding of the time.First the papers introduce the current domestic and international situation. Next, the main technology and the connected content are introduced in detail. Following is the investigation and study according to the software engineering thought to the system, the demand analysis and the system design and the function module. Next is the design which is according to the different module the analysis, such as client and server communications, client and the client communications. In this part also has the design of the main flow, and flow charts to illustrate and text description .The main design mainly uses the Black-box design and the combination of different methods.The fifth chapter is this design result and the appraisal, regarding this systematically carries on the test in the whole, and makes the objective appraisal,studying and solving problem and the function of the social development. Finally is the acknowledgment and the reference, regarding this designs has the help person to express thanks as well as own refer important literature.Keywords C/S; chating system; TCP / IP protocol; JSP目录摘要 (I)Abstract (II)第1章绪论 (1)1.1课题研究背景 (1)1.2基本技术支持 (1)1.2.1 ASP简介 (1)1.2.2 HTML简介 (3)第2章需求分析 (5)2.1功能需求 (5)2.2 性能需求 (5)2.3可行性分析 (6)2.3.1技术可行性 (6)2.3.2操作可行性 (7)2.3.3经济与技术可行性 (7)第3章总体设计 (8)3.1软件运行环境设计 (8)3.2功能介绍 (8)3.2.1功能结构设计 (8)3.2.2系统模块设计 (9)3.3 数据库设计 (10)第4章详细设计 (11)4.1用户登录模块的设计 (11)4.2新用户注册模块的设计 (13)4.3密码修改模块的设计 (14)4.4聊天者发言模块设计 (15)4.4.1用户聊天时的具体设计 (16)4.4.3显示发言信息模块设计 (18)4.4.3显示在线用户模块设计 (19)4.4.4用户离开聊天室的设计 (19)4.5数据库结构设计 (20)第5章网站测试与性能分析 (22)总结 (25)致谢 (26)参考文献 (27)附录A (28)附录B (35)第1章绪论1.1课题研究背景随着Internet的普及和宽带技术的成熟,越来越多的用户进入到网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效。
VC++实现简单的C/S聊天程序1.VC++网络编程及Windows Sockets API简介VC++对网络编程的支持有socket支持,WinInet支持,MAPI和ISAPI支持等。
其中,Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。
最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的Berkeley Socket接口(套接字)。
在桌面操作系统进入Windows时代后,仍然继承了Socket方法。
在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket()。
可以这样理解:Socket 实际上是一个通信端点,通过它,用户的Socket程序可以通过网络和其他的Socket应用程序通信。
Socket存在于一个"通信域"(为描述一般的线程如何通过Socket进行通信而引入的一种抽象概念)里,并且与另一个域的Socket交换数据。
Socket有三类。
第一种是SOCK_STREAM(流式),提供面向连接的可靠的通信服务,比如telnet,http。
第二种是SOCK_DGRAM(数据报),提供无连接不可靠的通信,比如UDP。
第三种是SOCK_RAW(原始),主要用于协议的开发和测试,支持通信底层操作,比如对IP和ICMP的直接访问。
2.Windows Socket机制分析2.1一些基本的Socket系统调用主要的系统调用包括:socket()-创建Socket;bind()-将创建的Socket与本地端口绑定;connect()与accept()-建立Socket连接;listen()-服务器监听是否有连接请求;send()-数据的可控缓冲发送;recv()-可控缓冲接收;closesocket()-关闭Socket。
实验报告实验报告名称:简易聊天程序学生姓名:学生学号:实验日期:2013 –12—20实验报告内容一.简介本程序是一个简易的聊天程序,在程序里涉及到了网络通信基本理和Socket编程技术。
由于程序是在IP环境下运行,所以分服务器端和客户端,服务器端和客户端是通过建立Socket链接来实现聊天功能。
套接字(Socket)是一种双向的通信接口,可以通过这个端口与任何一个具有Socket端口的计算机通信,套接字是网络通信的基础。
使用Socket进行网络通信必须包含下面的几种信息:双方认可的协议,本地主机的IP地址,对方主机的IP地址,本地进程的协议端口,对方进程的协议端口。
下面是文本聊天部分所要完成的功能:1.在这个系统中只要在线就可以和所有使用此程序的且已经在线的朋友进行聊天,每个人有可以有一个昵称,当开始进入时,会在每个人的窗口弹出“有一个游客已经进入”。
2.当输入完聊天信息以后进行发送,当发送没有结束时,不能进行新的聊天内容的输入。
一般聊天内容一次不能超过500个字符。
3.工作流程图大致如下:4. 进行聊天需要建立服务器端Socket和客户端Socket,并且要连接上,这样才能进行信息的传送。
二.操作步骤1.创建对话框类chat,在向导的第2步骤中,选中windows Sockets.2.设计对话框“我的聊天程序”,添加相应的控件及其控件变量3.添加并设计服务端端口类和客户端端口类三:通信模块关键代码分析:(1)//服务器端对客户端Socket的处理代码void CChatDlg::ProcessPendingAccept(){CClientSocket* pSocket = new CClientSocket();if (m_pListenSocket.Accept(*pSocket)){CPackMessg msg;msg.m_strText="一个游客进入聊天室了";// m_strShowMessage+="一个游客进入聊天室了\n";SetDlgItemText(IDC_SHOWMESSAGE,"一个游客进入聊天室了\n");POSITION pos;for(pos=m_connectionList.GetHeadPosition();pos!=NULL;){CClientSocket * t= (CClientSocket *)m_connectionList.GetNext(pos);t->SendMessage(&msg);}pSocket->Init(this);m_connectionList.AddTail(pSocket);}elsedelete pSocket;}(2)//客户端连接到服务器的消息相应函数void CChatDlg::OnConnect(){// TODO: Add your control notification handler code hereif(!m_bInit){BYTE f0,f1,f2,f3;CString name;((CIPAddressCtrl*)(GetDlgItem(IDC_IPADDRESS)))->GetAddress(f0,f1,f2,f3);CString ip;ip.Format("%d.%d.%d.%d",f0,f1,f2,f3);m_bClient=true;m_clientsocket.Create();if(m_clientsocket.Connect(ip,GetDlgItemInt(IDC_PORT))){m_clientsocket.Init(this);SetDlgItemText(IDC_SHOWMESSAGE,"客户端连接成功!");m_bInit=true;}else{m_clientsocket.Close();AfxMessageBox("客户端连接失败!");m_bInit=false;}}}(3)//建立服务器端的消息相应函数void CChatDlg::OnSetserver(){// TODO: Add your control notification handler code hereif(!m_bInit){m_bClient=false;m_bInit=true;if(m_pListenSocket.Init(GetDlgItemInt(IDC_PORT),this)==FALSE){m_bInit=false;return;}}}(4)CServerSocket是服务器端Socket类,关于这部分的核心代码为:BOOL CServerSocket::Init(UINT port, CChatDlg* dlg){ //服务器端初始化m_uPort=port;m_dlg=dlg;if(Create(m_uPort)==FALSE){AfxMessageBox("服务器套接字创建失败!");return FALSE;}if(this->Listen()==FALSE){AfxMessageBox("服务器监听错误!");return FALSE;}m_dlg->SetDlgItemText(IDC_SHOWMESSAGE,"服务器创建成功!");return TRUE;}//有连接接入的时候触发该事件void CServerSocket::OnAccept(int nErrorCode){// TODO: Add your specialized code here and/or call the base classm_dlg->ProcessPendingAccept();CSocket::OnAccept(nErrorCode);}(5)CClientSocket是客户端Socket类,核心代码:1.//通信Socket的初始化,一些关于传输数据可序列化的操作:void CClientSocket::Init(CChatDlg * dlg){m_sfSocketFile= new CSocketFile(this);m_aSessionIn=new CArchive(m_sfSocketFile,CArchive::load);m_aSessionOut=new CArchive(m_sfSocketFile,CArchive::store);m_bClose=false;this->m_dlg=dlg;}2.//Socket 接收到传输过来的数据的消息映射函数:void CClientSocket::OnReceive(int nErrorCode){// TODO: Add your specialized code here and/or call the base classCSocket::OnReceive(nErrorCode);do{CPackMessg temp;temp.Serialize(*m_aSessionIn);m_dlg->m_sMsgList+=temp.m_strText+"\r\n";m_dlg->SetDlgItemText(IDC_SHOWMESSAGE,m_dlg->m_sMsgList);int linenum=((CEdit *)(m_dlg->GetDlgItem(IDC_SHOWMESSAGE)))->GetLineCount();((CEdit*)(m_dlg->GetDlgItem(IDC_SHOWMESSAGE)))->LineScroll(linenum);//如果是服务端还需要将接收到的数据转发到其他客户端if(!m_dlg->m_bClient){for(POSITIONpos=m_dlg->m_connectionList.GetHeadPosition();pos!=NULL;){CClientSocket * t = (CClientSocket*)m_dlg->m_connectionList.GetNext(pos);if(t->m_hSocket!=this->m_hSocket){t->SendMessage(&temp);}}}}while (!m_aSessionIn->IsBufferEmpty());}3.//发送数据到另一端BOOL CClientSocket::SendMessage(CPackMessg * msg) {if (m_aSessionOut != NULL){msg->Serialize(*m_aSessionOut);m_aSessionOut->Flush();return TRUE;}else{//对方关闭了连接m_bClose=true;CloseSocket();m_dlg->CloseSessionSocket();return FALSE;}}4.//关闭Socket,需要将可序列化相关的内存释放void CClientSocket::CloseSocket(){if(m_aSessionIn){delete m_aSessionIn;m_aSessionIn=NULL;}if(m_aSessionOut){delete m_aSessionOut;m_aSessionOut=NULL;}if(m_sfSocketFile){delete m_aSessionOut;m_sfSocketFile=NULL;}Close();m_bInit=false;m_bClose=true;}5.//Socket 接收到对方Socket关闭的消息后的响应函数void CClientSocket::OnClose(int nErrorCode){CSocket::OnClose(nErrorCode);m_bClose=true;CloseSocket();m_dlg->CloseSessionSocket();CSocket::OnClose(nErrorCode);}。
C/S架构的即时聊天系统的设计与实现摘要:随着信息时代的飞速发展,尤其是互联网技术的兴起,使人们愈来愈倾向于通过网络来交流、传递消息。
网络即时聊天系统正是这样一个被广泛应用的媒介。
借助它,人们可以方便地进行实时对话,文件传送等。
本文以一个“即时通讯系统”的设计和开发为背景,详细介绍了以Java语言和MySql数据库为平台开发软件系统的过程。
系统的实现是基于TCP/IP通信协议,使用的是客户端/服务器模式,用到了Java里面的Swing、多线程、JDBC、Socket等高级编程技术。
通过直接使用Java提供的ServerSocket和ObjectInputStream等类将客户端和服务器端发送的各类消息封装成统一的数据流以实现消息的交换。
本系统的开发过程遵循了基本的软件工程学的方法,实现了即时通讯、群组聊天、文件传送等功能。
关键词:Java;数据库;Socket编程;即时通讯系统;TCP/IP协议The Instant Messaging System based on C/SStructureAbstract: With the rapid development of the information age, especially the rise of internet technology, more and more people tend to communicate and deliver the messages through the internet.Instant messaging system is such a widely used medium. With it,the real-time dialogue and file transfer can be easily carried out. Taking the design and development of the instant messaging system as the background , this article describes in detail the process of developing software systems with Java and MySql. The realization of the system is based on the TCP / IP communication protocol, and uses a client / server mode .Many advanced java technologies such as Swing ,java multi-threading, JDBC, socket programming and so on are used. By directly using the ServerSocket ,ObjectInputStream and other classes supported in Java API, messages sented by the client and server side are packaged into a uified data stream in order to achieve the exchange of messages. The whole development process of this system follows software engineering methods,and instant messaging, group chatting, file transferring and other functions are realized.Keywords: Java; database; Socket programming; instant messaging system; TCP/IP protocol目录第一章引言 (1)1.1选题背景和意义 (1)1.2本文的主要工作 (2)第二章基于C/S架构的即时通讯系统概述 (3)2.1系统的可行性分析 (3)2.2系统的实现目标和基本功能 (4)2.3系统开发环境和关键技术介绍 (4)第三章基于C/S架构的即时通讯系统设计 (9)3.1系统详细设计 (9)3.1.1 系统总体流程图 (9)3.1.2 系统总体功能模块划分 (10)3.1.3 系统用例图 (11)3.1.4 系统数据流图 (13)3.2 数据库设计 (14)3.3 系统关键类结构设计 (19)第四章基于C/S架构的即时通讯系功能实现 (24)4.1注册模块功能实现 (24)4.2登录模块功能实现 (26)4.3聊天模块功能实现 (28)4.4文件传送模块功能实现 (32)4.5后台管理模块功能实现 (36)第五章总结 (40)致谢 (43)参考文献 (44)第一章引言1.1选题背景和意义随着经济全球化的发展,世界各地的不同人、组织、机构之间的联系越来越密切。
c/s模式聊天程序赵盼电气1111.总体介绍:这是一个CS模式的聊天程序。
有一个server端,和若干client端。
Client端之间通过向server端发送消息,进而由server端进行信息的更新并发送到个client端。
从而实现聊天。
2.使用说明:总共有三个java文件和一个文本文件。
clientInt.java login.java AppServer.java UsrPwd.txt(本来还应该有一个Register.java)即客户端程序,服务器端程序,登陆程序,注册程序,以及一个在服务器端保存注册用户信息的文本文件。
使用时,需要编译服务器端应用程序。
为编译服务器程序,执行下面的命令:c:\>javac AppServer.java在编译服务器程序通过之后,通过执行下面的命令就可以启动聊天服务器:c:\>java AppServer下一步,需要编译创建的两个接口文件,执行下面的命令:c:\>javac login.javac:\>javac clientInt.java现在已经为聊天程序的三个接口创建的类文件。
即聊天服务器端已经正式启动,可以接收客户端信息了。
即服务器端存在clientInt.java login.java AppServer.java UsrPwd.txt 四个文件。
现在启动客户端。
将clientInt.java login.java两个文件复制到客户端,同样先进行编译c:\>javac login.javac:\>javac clientInt.java通过后执行下面的命令:c:\>java login即可登陆服务器。
以上操作都是在客户端和服务器端计算机上已经安装JDK的前提下进行的。
登陆时,弹出登陆框,需要输入用户名和密码即可登陆。
成功登陆后,进入聊天界面,可以发送信息,并接收其他客户端发送的信息,同时可以看见其他在线用户。
实现一个简单的点对点网络聊天程序随着互联网的不断发展,人们越来越依赖于网络进行信息传递和交流。
而随着新技术的不断涌现,人们对网络聊天的需求也越来越高。
在这个背景下,开发一个简单易用的点对点网络聊天程序,无疑是一个非常受欢迎的项目。
本文将介绍如何实现一个基于Python的简单点对点网络聊天程序。
第1步确定技术框架在开始编写程序之前,需要确定使用的技术框架。
由于点对点网络聊天程序需要实现实时通信,这就需要使用一种支持Socket 编程的技术框架。
Python作为一种易于学习的高级编程语言,在网络编程方面也表现出了优秀的性能。
因此,本文选择使用Python的Socket库和Tkinter库实现点对点网络聊天程序。
第2步编写客户端程序接下来,需要编写客户端程序。
客户端程序主要用于连接服务器,并向其他客户端发送消息。
客户端程序的实现需要遵循以下步骤:1、导入Socket和Tkinter库。
2、定义客户端程序类。
3、定义GUI组件和方法,包括用户界面、消息发送功能和消息接收功能。
4、定义连接服务器和发送消息的方法。
客户端程序的核心代码如下:import socketimport tkinter as tkclass Client:def __init__(self):ername = Noneself.server_ip = "127.0.0.1"self.server_port = 5555self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.gui()def gui(self):self.root = ()self.root.geometry("400x400")self.root.title("P2P Chat - Client")self.entry_message = tk.Entry(self.root)self.entry_message.pack(side="left", fill="x", expand=True)self.button_send = tk.Button(self.root, text="Send", command=self.send_message)self.button_send.pack(side="right")bel_message = bel(self.root, text="Enter username:")bel_message.pack(side="left")self.entry_username = tk.Entry(self.root)self.entry_username.pack(side="left", fill="x", expand=True)self.button_connect = tk.Button(self.root, text="Connect", command=self.connect_to_server)self.button_connect.pack(side="right")def connect_to_server(self):self.client_socket.connect((self.server_ip, self.server_port)) ername = self.entry_username.get()self.client_socket.send(bytes(ername, "utf8"))self.receive_messages()def send_message(self):message = self.entry_message.get()self.client_socket.send(bytes(message, "utf8"))self.entry_message.delete(0, tk.END)def receive_messages(self):while True:try:message = self.client_socket.recv(1024).decode("utf8") print(message)except OSError:breakdef mainloop(self):self.root.mainloop()if __name__ == "__main__":client = Client()client.mainloop()第3步编写服务器端程序客户端程序只能够实现连接服务器和发送消息的基本功能,还需要依靠服务器端程序实现客户端之间的消息传递。
基于CS模式的简单聊天程序(附程序源码)基于C/S模式的简单聊天程序(附程序源码)⼀、需求分析设计要求使⽤Socket实现⽹上聊天功能。
⽤户可以通过客户端连接到服务器端并进⾏⽹上聊天。
聊天时可以启动多个客户端。
服务器端启动后,接收客户端发来的⽤户名和密码验证信息。
验证通过则以当前的聊天客户列表信息进⾏响应;此后接收客户端发来的聊天信息,转发给客户端指定的聊天客户(即私聊)或所有其他客户端;在客户断开连接后公告其退出聊天系统的信息。
客户端启动后在GUI界⾯接收⽤户输⼊的服务器端信息、账号和密码等验证客户的⾝份。
验证通过则显⽰当前系统在线客户列表。
客户可以与指定对象进⾏私聊,也可以向系统中所有在线客户发送信息。
实现本程序需要了解⽹络基础知识,掌握C/S结构的⼯作特点,掌握数据结构、⾼级语⾔及⽹络编程知识,可以选择VisualC++、C或Java等语⾔实现。
⼆、设计过程与相关理论程序设计是基于TCP协议,采⽤C/S模式实现简单的⼀对多聊天(群聊)、⼀对⼀聊天(私聊)。
TCP是⼀种可靠的、基于连接的⽹络协议,它是⾯向字节流的,即从⼀个进程到另⼀个进程的⼆进制序列。
⼀条TCP连接需要两个端点,这两个端点需要分别创建各⾃的套接字。
通常⼀⽅⽤于发送请求和数据(在这⾥为聊天的客户端),⽽另⼀⽅⽤于监听⽹络请求和数据(在这⾥为服务端)。
常⽤于TCP编程的有两个类,均在包⾥,这两个类为:Socket、ServerSocket。
关于SocketSocket是建⽴⽹络连接使⽤的,在连接成功时,应⽤程序两端都会产⽣⼀个Socket实例,操作这个实例,完成所需要的对话。
Socket类有多个构造⽅法:(1)public Socket(String host, int port) 创建⼀个流套接字并将其连接到指定主机上。
(2)public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 创建⼀个流套接字,指定了本地的地址和端⼝以及⽬的地址和端⼝。
实现一个简单的聊天程序随着互联网的发展,人们的交流方式不再局限于面对面交流,越来越多的人开始使用网络聊天工具来沟通交流。
聊天程序作为最常用的交流工具之一,深受大众喜爱。
那么,本文将介绍如何实现一个简单的聊天程序,供大家参考。
一、搭建基础环境实现一个聊天程序需要准备的基础环境是:Python、Socket模块。
在安装好Python之后,我们需要导入Socket模块:```import socket```Socket模块用于实现网络编程的接口,无论是TCP/IP协议还是UDP协议,都可以通过Socket实现。
二、建立数据连接在实现简单的聊天程序中,我们需要将客户端和服务器连接起来,建立一个网络通道,这时我们需要用到socket()方法。
```sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ```其中AF_INET参数表示使用IPv4协议,SOCK_STREAM参数表示使用流式socket,即TCP。
我们还需要设置监听端口号,以便于客户端获取到服务器连接。
```port = 8080localhost = socket.gethostname()sock.bind((localhost, port))```bind()方法中的turple参数是服务器的主机名和监听端口号。
如果服务器有多个IP地址,可以使用其中任意一个地址来绑定。
三、接受连接接收客户端的连接请求,需要使用Socket的listen()方法。
这个方法指定连接队列的最大长度,如果有新的客户端请求,程序接受请求并建立新的socket与客户端进行通信。
接着,我们需要使用accept()方法来接受连接,并返回一个新的Socket对象和客户端的IP地址和端口信息。
在服务器与客户端成功连接后,我们需要在服务端打印出连接结果。
```sock.listen(5)while True:client, addr = sock.accept()print(f"Connection from {addr} established")```四、消息传送实现消息传送,需要在服务器和客户端中分别实现发送和接收消息的功能。
计算机网络课程设计任务书计算机网络课程设计说明书学院名称:计算机与信息工程学院班级名称:2012级物联网工程学生姓名:宋余保学号:2012211466题目:基于C/S的简单聊天室指导教师姓名:赵欢欢起止日期:2014.6.9-2014.6.15一、选题背景使用Socket实现网上聊天功能。
用户可以通过客户端连接到服务器端并进行网上聊天。
聊天时可以启动多个客户端。
服务器端启动后,接收客户端发来的用户名和密码验证信息。
验证通过则以当前的聊天客户列表信息进行响应;此后接收客户端发来的聊天信息,转发给客户端指定的聊天客户(即私聊)或所有其他客户端;在客户断开连接后公告其退出聊天系统的信息。
客户端启动后在GUI界面接收用户输入的服务器端信息、账号和密码等验证客户的身份。
验证通过则显示当前系统在线客户列表。
客户可以与指定对象进行私聊,也可以向系统中所有在线客户发送信息。
实现本程序需要了解网络基础知识,掌握C/S结构的工作特点,掌握数据结构、高级语言及网络编程知识,可以选择Visual C++、C或Java等语言实现。
二、方案设计基于C/S的简单聊天室可以实现用户与服务器间,服务器与多个用户间的通信。
聊天室程序通常需要完成以下一些基本功能:(1)登录聊天室;(2)启动服务器;(3)关闭服务器;(4)用户之间的聊天;(5)退出聊天室。
本系统其体功能需求如下:(1)聊天室管理员经登录界面登录到管理界而,即系统的服务器端。
用户经登录界而都进入聊天大厅。
(2)不论是管理员还是用户都需一要在登录界面输入正确的用户名和密码后才可以登录到各自的界面中去。
(3)系统的两个主要界面都是为方便管理员和用户操作的。
首先,管理员进入到管理界而后可以方便的启动/停止服务器,看到在线用户的信息和聊人信息、。
用户进入到聊天大厅中可以聊天,查看服务器状态。
(4) 一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。
(5)用户的聊天信息录入,重写,发送,接收方便,快捷。
(6)服务器状态,聊天信息和在线用户人数及时刷新。
(7)聊天室系统运行稳定、安全性高、三、详细设计服务器端(1)首先实现的是服务器的GUI界面,如图3-1所示:图3-1服务器GUI代码如下:// 构造放法public Server() {frame = new JFrame("服务器");contentArea = new JTextArea();contentArea.setEditable(false);contentArea.setForeground(Color.blue);txt_message = new JTextField();txt_max = new JTextField("30");txt_port = new JTextField("6666");btn_start = new JButton("启动");btn_stop = new JButton("停止");btn_send = new JButton("发送");btn_stop.setEnabled(false);listModel = new DefaultListModel();userList = new JList(listModel);southPanel = new JPanel(new BorderLayout());southPanel.setBorder(new TitledBorder("写消息"));southPanel.add(txt_message, "Center");southPanel.add(btn_send, "East");leftPanel = new JScrollPane(userList);leftPanel.setBorder(new TitledBorder("在线用户"));rightPanel = new JScrollPane(contentArea);rightPanel.setBorder(new TitledBorder("消息显示区"));centerSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,rightPanel);centerSplit.setDividerLocation(100);northPanel = new JPanel();northPanel.setLayout(new GridLayout(1, 6));northPanel.add(new JLabel("人数上限"));northPanel.add(txt_max);northPanel.add(new JLabel("端口"));northPanel.add(txt_port);northPanel.add(btn_start);northPanel.add(btn_stop);northPanel.setBorder(new TitledBorder("配置信息"));frame.setLayout(new BorderLayout());frame.add(northPanel, "North");frame.add(centerSplit, "Center");frame.add(southPanel, "South");frame.setSize(600, 400);//frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());//设置全屏int screen_width =Toolkit.getDefaultToolkit().getScreenSize().width;int screen_height =Toolkit.getDefaultToolkit().getScreenSize().height;frame.setLocation((screen_width - frame.getWidth()) / 2,(screen_height - frame.getHeight()) / 2);frame.setVisible(true);}(2)其实实现服务器的启动代码如下// 启动服务器public void serverStart(int max, int port) throws.BindException {try {clients = new ArrayList<ClientThread>();serverSocket = new ServerSocket(port);serverThread = new ServerThread(serverSocket, max);serverThread.start();isStart = true;} catch (BindException e) {isStart = false;throw new BindException("端口号已被占用,请换一个!");} catch (Exception e1) {e1.printStackTrace();isStart = false;throw new BindException("启动服务器异常!");}(3)再次是实现服务器与客户机连接机制,如果有客户机申请连接,则为此客户机创建线程,代码如下:// 服务器线程class ServerThread extends Thread {private ServerSocket serverSocket;private int max;// 人数上限// 服务器线程的构造方法public ServerThread(ServerSocket serverSocket, int max) { this.serverSocket = serverSocket;this.max = max;}public void run() {while (true) {// 不停的等待客户端的链接try {Socket socket = serverSocket.accept();if (clients.size() == max) {// 如果已达人数上限BufferedReader r = new BufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriter w = new PrintWriter(socket.getOutputStream());// 接收客户端的基本用户信息String inf = r.readLine();StringTokenizer st = new StringTokenizer(inf, "@"); User user = new User(st.nextToken(),st.nextToken());// 反馈连接成功信息w.println("MAX@服务器:对不起," + user.getName()+ user.getIp() + ",服务器在线人数已达上限,请稍后尝试连接!");w.flush();// 释放资源r.close();w.close();socket.close();continue;}ClientThread client = new ClientThread(socket);client.start();// 开启对此客户端服务的线程clients.add(client);listModel.addElement(client.getUser().getName());//更新在线列表contentArea.append(client.getUser().getName()+ client.getUser().getIp() + "上线!\r\n");} catch (IOException e) {e.printStackTrace();}}}}(4)再次是实现服务器的消息发送和接受的处理机制,代码如下:public void run() {// 不断接收客户端的消息,进行处理。