




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 说 明 书 题 目: 网络设计 院(系): 专 业: 班 级: 学 号: 姓 名: 指导老师: 完成时间: 2007年7月14日 成绩: 目录1引言22设计环境与系统分析23详细实现34系统运行125小结.136参考文献.13 1引言ChipChat实现的是局域网中的聊天功能,其为一个对等的应用,既是服务器又是客户端,ChipChat可以自动发现在线的伙伴,并可以和在线的伙伴进行点对点的聊天。主界面中也可以实现对所以在线伙伴的群聊。同时ChipChat拥有良好的用户界面。 2系统环境与系统分析设计本程序使用的是Java编程语言,Eclipse作为开发工具。采用Java包中Thr
2、ead类,Socket类和ServerSocket进行程序的编写。在服务器端和客户端分别有各自的封装线程对接收来的数据进行处理。同时异常处理也是其中的一大部分,在多个客户端之间发送和接收数据时要如果发生了异常,则进行了及时的处理。 总体模块设计:1、 群聊功能模块:该模块为提供群聊功能,功能实现为基于UDP数据包的数据传输,该传输的方式为通过组播地址“”实现对加入组播组的端口的数据包的传输。2、 TCP聊天连接模块:该模块对ServerSocket端口6321持续进行监听,一旦收到连接请求就马上打开一个TCP_Frame进程窗口进行通信处理。3、 在线好友列表模块:当每一个程
3、序初始化运行的时候,将启动CATCHER进程,并加入组播组“”、“”其中“”为登陆信息接收窗口“”为群聊功能模块的信息接收组播地址。当程序启动时会向组播组发送一个包含自己昵称和IP地址的组播数据包,用以通知其他ChipChat程序自己的上线信息,当其他ChipChat收到这个数据包时会根据包中的IP地址对其进行TCP协议的连接,以此来实现对后上线的程序告知自己的IP地址以及用户名等信息。4、 界面设计模块:分为总体界面与TCP点对点聊天界面两个模块,其中总体界面包含了群聊信息窗口,以及群聊功能,还要好友在线信息窗口。TCP
4、点对点聊天界面包含了在好友在线信息中对选中的好友进行单独聊天的功能。 3详细实现1系统群聊功能模块设计:系统的群聊功能模块功能实现的是对整个组播组中的用户实现UDP数据包的组播,已实现对所有在线用户的广播通信,其具体的功能实现分为组播端口的监听与组播信息包的发送。ChipChat_Listener()模块实现的是对组播地址为“”端口为7321的组播组的初始化,然后实例化一个进程CCListener对指定的端口进行监听,已实时的接收组播组中的信息包并在聊天信息窗口中显示出来。核心代码如下:ChipChat_Listener()public void ChipChat_Liste
5、ner()/群聊端口监听trysocketr = new MulticastSocket(DEFAULT_PORT);socketr.joinGroup(group); catch(IOException e)e.printStackTrace();cclisten = new CCListener(socketr,this);/实例化cclisten的CCListener线程对端口进行监听线程CCListener对端口进行不断的循环监听,核心的代码如下:class CCListener extends ThreadMulticastSocket MSocket;DatagramPacket
6、packet; ChipChat server;public CCListener(MulticastSocket socket,ChipChat cc)MSocket = socket;server = cc;this.start();public void run()trywhile(true)byte Rdata = new byte256;packet = new DatagramPacket(Rdata,Rdata.length);MSocket.receive(packet);cessMsg(new String(packet.getData();catch(E
7、xception k)k.printStackTrace();2好友在线信息模块设计:当监听该组播通信端口的ChipChat程序收到判定位为“C”的数据包时,则知道有新伙伴上线,这是向组播组中回应一个数据结构如上的,但是判定位为“A”,用户名为对方用户名的组播数据包,这样尽管所有的程序都可以收到这个包,但只有之前的发送方通过比对数据包中的用户名和判定位得知是对自己的响应包,才将这个信息保存,其他的程序因为用户名当有ChipChat关闭下线的时候,在退出前将会发送一个以判别位为“D”的组播数据包,以通知其他程序自己已经下线。其他程序接收到这个包的时候根据其中的判别位“D”以及用户名,得到该用户下
8、线的信息,并删除UserInfo数组中该用户的信息,并在好友在线信息列表框中将其删除。核心代码如下:CATCHERpublic void run()/run()实现对组播端口的监听,并作出反映trysocket = new DatagramSocket();while (true) byte Rdata = new byte256;packet = new DatagramPacket(Rdata, Rdata.length);Csocket.receive(packet);/等待接受数据包/count记录了数据包的最后一位数,也就是记录了用户名的长度.String count = new S
9、tring(packet.getData().substring(packet.getLength()-1,packet.getLength();int num = Integer.parseInt(count);/num为int类型,记录了用户名的长度./根据数据包的数据结构,check记录了从1+num开始的到倒数第二位的字符.就是数据包中包含的IP地址.String check = new String(packet.getData().substring(1+num, packet.getLength()-1);String judge = new String(packet.getD
10、ata().substring(0,1);/根据数据包的数据结构,usertag记录了从第二位到num+1长度的信息,也就是用户名String usertag = new String(packet.getData().substring(1,num+1);/ judge为"C"时反送一个含有对方用户名以及本机IP的数据包到组播组if(judge.equals("C")processMsg(usertag);userinfoi = new UserInfo(usertag,check);Ring();Connect(check);/ judge为&quo
11、t;D"时删除登陆信息框中的终端的IP地址if(judge.equals("D")while(userinfoi != null)String l = userinfoi.getName();if(l.equals(usertag)k=i;while(userinfok != null)userinfok = userinfok+1;k +;break;tryremoveMsg(usertag);catch(Exception n)tryremoveMsg(usertag);catch(Exception n2)/* 以下判断为处理终端与本机用户名重名的情况.如果
12、出现了重名的情况则修改judge和usertag为不相关的信息, * 避免显示在登陆信息框中. */catch(Exception er)er.printStackTrace();其中的Connect方法为实现对对方的回应,其回应内容的核心代码如下:ConnectCheckSocket = new Socket(check,CHECK_PORT);in = new BufferedReader(new InputStreamReader(CheckSocket.getInputStream();out = new PrintWriter(CheckSocket.getOutputStream(
13、);out.println("-");out.flush();out.println(tag);out.flush();out.println(InetAddress.getLocalHost().getHostAddress();out.flush();out.println("-");out.flush();对对方的应答连接的接收为实例化一个Check_in线程类当监听到连接请求的时候则交给另外一个线程类logon进行处理,然后主服务端口继续进行监听。两个线程类的具体代码如下:logonpublic class logon extends Threa
14、dChipChat server;BufferedReader in;PrintWriter out;Socket client;UserInfo userinfo;int k;String name,ip;public logon(Socket socket,ChipChat cc,UserInfo ui)server = cc;client = socket;userinfo = ui;tryin = new BufferedReader(new InputStreamReader(client.getInputStream();out = new PrintWriter(client.g
15、etOutputStream();cessMsg("连接成功");catch(IOException Te)Te.printStackTrace();cessMsg("连接失败");public void run()String msg = null;trymsg = receiveMsg();msg = receiveMsg();name = msg;msg = receiveMsg();ip = msg;userinfok = new UserInfo(name,ip);cessFriend
16、(userinfok.getName();msg = receiveMsg();in.close();out.close();client.close();catch(IOException Te2)tryin.close();out.close();client.close();catch(IOException ee)ee.printStackTrace();Te2.printStackTrace();/catch(InterruptedException e1)finallytryin.close();out.close();client.close();catch(IOExceptio
17、n ee)ee.printStackTrace();public String receiveMsg()throws IOException/接收数据String msg = new String();trymsg = in.readLine();catch(IOException e)in.close();out.close();client.close();msg = new String("-");e.printStackTrace();return msg;Check_in:public class Check_in extends ThreadServerSock
18、et Check;Socket client;UserInfo userinfo;ChipChat server;public final static int CHECK_PORT = 5000;public Check_in(ChipChat cc,UserInfo ui)server = cc;userinfo = ui;this.start();public void run()tryCheck = new ServerSocket(CHECK_PORT);catch(IOException e)e.printStackTrace();trywhile(true)client = Ch
19、eck.accept();logon ll = new logon(client,server,userinfo);ll.start();catch(IOException e)e.printStackTrace();1、 TCP通信模块设计:当好友列表框内显示出了在线好友的用户名时,这时可以通过单机连接按钮或者直接在用户列表中双击用户名来实现对指定用户进行TCP连接,以实现点对点的单独通信。在列表框中的用户名以及IP地址信息保存在一个UserInfo数组之中,由于是顺序排放的数组,所以可以通过列表框中的顺序得到该对象所对应的IP地址。接收方面由一个TCPConnect线程类负责监听。当接收到
20、一个连接请求的时候,则启动一个应用程序窗口TCP_Frame对其进行处理,通过TCP_Frame窗口,用户间可以进行点对点的通信。其中对TCP端口的监听类TCPConnect代码如下:TCPConnectclass TCPConnect extends ThreadServerSocket listen;ChipChat c;int port;String name;public TCPConnect(int TCP_PORT,ChipChat CC,String nickname)name = new String(nickname);c = CC;port = TCP_PORT;this.
21、start();public void run()/run()实现了对指定的端口的监听try/初始化端口,将listen端口放在run()方法内,可以使得一机运行多个程序而不出现端口冲突listen = new ServerSocket(port);processMsg("正在监听TCP端口");catch(IOException e)JOptionPane.showMessageDialog(null,"请不要在同一机器上运行多个CC","端口已被占用",JOptionPane.ERROR_MESSAGE); processMsg("群聊功能仍可使用");e.printStackTrace();trywhile(true)Socket client = listen.accept();/监听端口TCP_Frame TT = new TCP_Frame(client,name);/当接收到会话请求时打开会话程序TT.setVisible(true);catch(IOException e)e.printStackTrace();public void processMsg(String str)/在应用程序的登陆信息框中显示信息负责点对点的通信的TCP_Frame通信部分核心代码如下:发送按钮事
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届福建省漳州市龙文区龙文中学数学七下期末考试试题含解析
- 聚氨酯海工涂层设计与防污性能研究
- 消防安全科技应用措施
- 河南省信阳固始县联考2025届数学七下期末复习检测模拟试题含解析
- 广东省佛山市S6高质量发展联盟2024-2025学年高一下学期期中联考数学试卷
- 镍催化烯基砜的合成反应研究
- 传统音韵以现代性演绎的“文人情怀”-《云游不羡仙乡》的演奏探析
- 综合实践活动课程开发体系构建
- 新成员入队仪式详细流程
- 小学阶段学生心理发展计划
- GB/T 20140-2016隐极同步发电机定子绕组端部动态特性和振动测量方法及评定
- GB 15193.1-2014食品安全国家标准食品安全性毒理学评价程序
- 巩汉林小品《最后一堂课》台词剧本手稿
- DL∕T 2006-2019 干式空心电抗器匝间绝过电压试验设备技术规范
- 粮食平房仓设计规范课件
- 物质创造普遍秩序中文版
- 国家级高技能人才培训基地建设项目申请书
- 高校在完善国防动员机制中的作用与实现路径
- 化工原理习题(谭天恩)解答上
- 库欣综合征英文教学课件cushingsyndrome
- 聚酯合成的酯化与缩聚课件
评论
0/150
提交评论