Socket和多线程编程的聊天程序实现.doc
TOC\o1-3\h\z\u1.课题内容和要求 3
1.1课题内容 3
1.2课题要求 3
2.设计分析 3
2.1思路分析 3
2.2概要设计 3
2.3程序流程图 4
3.详细设计 5
3.1效劳器端 5
3.2客户端 15
4.问题提出及改良 23
4.1问题的描述 23
4.2程序改良的思考 23
5.课程设计总结 23
6指导老师意见 24
1.课题内容和要求
1.1课题内容
基于Socket和多线程编程的聊天程序实现
1.2课题要求
网络聊天程序设计非常复杂,允许多个人同时聊天更加需要多线程技术的支持,请实现一个简单的多线程网络聊天程序模拟。
2.设计分析
2.1思路分析
1.?在网络越来越兴旺的今天,人们对网络的依赖越来越强,网络聊天已经成了许多人生活中必不可少的一局部,基于这样的需求,出现了许多网络聊天通信工具,像QQ,MSN等等,但是人们已经不再满足于单一的两个人之间的聊天,而是对多人同时聊天产生了兴趣,于是出现了网络聊天室,不同地方的人可以在那个虚拟的聊天室里面热烈聊天。基于这样的想法,我们用JAVA设计一个多人同时聊天的小程序,用Socket编程实现网络通讯,面向连接的,采用多线程的实现技术。
2.实现一个简单的聊天室应用软件,要求能够显示聊天室中所有人的发言及人员进入和退出聊天室的相关信息。可以使用TCP实现C/S模式的聊天室,普通用户均使用客户端程序登录到效劳器,然后获得相关效劳。也可以使用UDP播送或组播实现P2P模式的聊天室。并在设计报告中分析两种方案的特点和区别。
3.在程序中,可以设置参加连接的最大数目,通过更改IP地址和端口号,成为不同的客户端,与效劳器端连接,进行多用户聊天。
4.为方便用户交互,我们采用图形化的用户界面。实现了好友添加,消息收发、显示等根本功能。
2.2概要设计
该网络聊天程序大致分为三个主要局部:客户端、效劳器端和用户图形界面。各个局部的初步设计思想、流程及存储结构如下:
程序整体框架:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续
客户端,使用Socket对网络上某一个效劳器的某一个端口发出连接请求,一旦连接成功,翻开会话;会话完成后,关闭Socket。客户端不需要指定翻开的端口,通常临时的、动态的分配一个端口。
效劳器端,使用ServerSocket监听指定的端口,端口可以随意指定〔由于1024以下的端口通常属于保存端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口〕,等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
用户图形界面方便程序与用户的交互,多个用户参加,完成会话功能,具体的设计要方便用户的使用,直观清晰,简洁明了,友好美观。
5.存储结构
下面列出主要存储结构或变量:
存储结构、变量、对象
类型
说明
post
InetAddress
标识IP地址
Port
int
标识端口
Server[]
ServerThread
效劳器端连接数
Client[]
Socket
客户端连接数
Client(Stringip,intp,Facechat)
public
Client类成员函数
Publicvoidrun()
Void
Client、Server类成员函数
Server(intport,Facechat)
public
Server类成员函数
Face()
Public
Face类成员函数
2.3程序流程图
客户机效劳器
客户机
效劳器
创立CClientSocket类的对象创立CServerSocket类的对象
创立CClientSocket类的对象
创立CServerSocket类的对象
Connect(),
Connect(),将套接字与效劳器相连
将sockets与本地IP和相应的端口绑定
Listen(),
Listen(),监听来自客户端的连接
是否有连接到效劳器?
否
显示错误信息接收客户端的连接请求
显示错误信息
接收客户端的连接请求
是否有建立连接?
是否有建立连接?
不为客户端建立连接,显示错误信息
不为客户端建立连接,显示错误信息
ReceiveMsg/()SendMsg
ReceiveMsg/()SendMsg(),在套接字上收发信息
否
否
为客户端建立连接
为客户端建立连接
SendMsgReceiveMsg
ReceiveMsg/()SendMsg(),在套接字上收发信息