计算机网络课程设计实验报告.docx
- 文档编号:10188669
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:8
- 大小:61.83KB
计算机网络课程设计实验报告.docx
《计算机网络课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计实验报告.docx(8页珍藏版)》请在冰豆网上搜索。
计算机网络课程设计实验报告
计算机网络课程设计实验报告
一、实验项目:
网络聊天程序
二、实验要求:
利用Winsock控件,采用TCP或UDP方式实现一个网络聊天程序。
具体要求如下:
(1)能够实现一个聊天服务器(采用TCP方式时可同时允许15个用户连接),并在用户之间相互进行信息发送。
(2)具有聊天记录功能。
(3)制作一个客户端程序。
在课程设计报告中要求给出程序设计的思想、关键程序说明以及服务器和客户程序运行界面的屏幕截图。
三、实验程序功能:
采用TCP方式实现的网络聊天程序:
(1)以某一用户名注册进入聊天室,自动判断是否与现有聊天室人员重名,给出相关信息。
进入后启动线程,获得现有聊天室人员的列表信息;
(2)点击[送出]按钮,向所有人发送信息。
双击列表中某人的名字,在弹出的窗口中可以写悄悄话,悄悄话内容只显示在这个人的屏幕上;
(3)点击[刷新谈话区],可以清空聊天信息屏幕。
点击[刷新聊天者列表]可以重新从服务器读取聊天室人员列表信息;
(4)点击[退出聊天室],向所有人发送离开信息,同时刷新聊天室人员列表;(5)服务器端程序先行运行,服务器读取来自客户端的信息流请求,并把相应处理结果返回客户端,完成与客户端的通信。
(6)点击[聊天记录],可以查看聊天室的聊天记录。
PEOPLE+名字+[性别]〉〉
进入聊天室
<<向其他人发送PEOPLE+名字+[性别]
QUIT>>
退出聊天室
<<终止并离开当前的客户端线程<<向其他人发送PEOPLE+名字+[性别]
MSG+谈话内容>>
发送普通话语
< 悄悄地对+名字+说+谈话内容+(我是+名字)>> 发送悄悄话 <<悄悄地对+名字+说+谈话内容+(我是+名字) Newlist>> 刷新聊天列表 <<向某一客户端发送所有线程的: PEOPLE+名字+[性别] MSG+谈话内容>> 聊天记录 < 五、设计思想: 传输层协议有两种: TCP和UDP,TCP是可靠传输,它把信息包捆绑,在必要的时候,排序和重传这些信息包以获得可靠的数据传输。 UDP支持快速的、无连接的、不可靠的信息包传输。 在JAVA中,使用TCP传输,其套接字的封装函数分TCP/IP客户套接字和 TCP/IP服务器套接字。 本程序使用TCP做,采用了JAVA中的流式 Socket的通信机制,流式Socket通信过程如下图: 客户套接字函数: Socket(Stringhostname,itnport)或 Socket(InetAddressipAddress,intport) 服务端套接字函数: ServerSocket(intport) ServerSocket(intport,intmaxQueue) ServerSocket(intport,intmaxQueue,InetAddresslocalAddress) 六、文件说明: 文件清单: (1)客户端线程主类: chatappletthree publicclasschatserverthreeimplementsRunnable {/*聊天室服务器端处理主类*/ //服务器构造初始化线程 publicchatserverthree() {} //服务器main()初始化 publicstaticvoidmain(Stringargs[]) {} //服务器线程connect操作run方法 publicvoidrun() {} //向聊天室所有人员发送普通话语信息 publicvoidbroadcast(Stringmsg) {} //处理悄悄话,向特定人员发送悄悄话 publicvoidbroadcast1(Stringmsg) {} //客户端线程类firstthread classfirstthreadextendsThread {} //firstthread初始化线程 publicfirstthread(chatserverthreeserver,Socketclient) {} //监听运行线程 publicvoidrun() {while(true){ line=in.readUTF();//line读取来自客户端线路的信息 //线路信息前端为PEOPLE表明有新人进入了聊天室if(line.startsWith("PEOPLE")){} //线路信息前端为QUIT表明有人离开了聊天室 elseif(line.startsWith("QUIT")){} //线路前端为MSG表明接收到的是普通聊天话语信息 elseif(line.startsWith("MSG")){} //线路前端为“悄悄的对”表明接收到的是悄悄话 elseif(line.startsWith("悄悄地对")){} //线路前端为newlist表明得到客户端刷新列表的请求 elseif(line.startsWith("newlist")){} } } (2)聊天室界面AWT面板类: Apanel: /*聊天室界面北部面板Apanel类*/ classApanelextendsPanel//用于构造面板 {} Bpanel: /*聊天室界面中部面板Bpanel类*/ classBpanelextendsPanel {} Cpanel: /*聊天室界面南部面板Cpanel类*/classCpanelextendsPanel {} (3)发送悄悄话弹出式窗口类: Mywindow: classMywindowextendsFrameimplementsActionListener { //构造方法初始化画出弹出式窗口界面Mywindow() {} //处理按钮事件的方法 publicvoidactionPerformed(ActionEvente) {} } (4)服务器端线程类: Chatserverthree: /*聊天室主类chatappletthree类*/ publicclasschatappletthreeextendsAppletimplementsRunnable,ActionListener,ItemListener{ //Applet启动初始化画出聊天室界面,建立与服务器连接 publicvoidinit(){} //启动线程 publicvoidstart() {} //终止线程 publicvoidstop(){} //关闭监听端口,断开连接 publicvoiddestroy(){} //客户端启动线程 publicvoidrun(){} }(4)服务器为每一个客户端启动的线程类 Firstthread //客户端线程类firstthread classfirstthreadextendsThread { protectedSocketclient; //listen读取来自客户端的消息: name格式为: PEOPLE+名字+[性别]Stringline,name; protectedDataOutputStreamfirstout,out;//定义网络数据输出流protectedchatserverthreeserver; protectedDataInputStreamin;//定义网络数据输入流 //firstthread初始化线程 publicfirstthread(chatserverthreeserver,Socketclient) { Bc袈fc≡κ⅛) OOOOOOOOOOOOAUωω'LuωωωlllU①AJ①SH」①AJ①sωlll 这是群聊,单击[聊天记录]可以获取聊天记录。 单击[刷新谈话区] 可以刷新聊天区域,[单击刷新聊天者列表]可以刷新聊天者列表。 双击聊天者列表中的昵称,可以弹出悄悄话窗口进行私聊 八、实验总结: 做这个课程设计时,大部分人都是用VC做的,VC里面直接封装了一些Socket函数,但是我觉得用java做更好,因为它的界面更友好,而且java里面也封装了Socket函数,且分为TCP和数据报的两种不同的Socket封装函数,程序员可方便的选择所需的函数。 通过这次的课程设计,更好的理解了套接字的作用,它就相当于一个插口,理解标准协议的任何线路端都能插入套接字并与之通信,它对应应用服务程序,相当于不同应用服务程序的地址,通过它来分别同一IP地址的不同应用服务程序。 在做这个程序时,因为我是采用java做的,所以我是用多线程机制实现的,这可以多个不同的线程同时运行。 计算机网络课程设计 ——网络聊天程序 学院: 班级: 姓名: 学号: 信息工程软件工程二班杨睿200505070210
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计 实验 报告