



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(完整)计算机网络tcp聊天室实验报告(完整)计算机网络tcp聊天室实验报告 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)计算机网络tcp聊天室实验报告)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整)计算机网络tcp聊天室实验报告的全部内容。计算机网络原理实 验 报告 书姓名:xxx班级:xxxxxx学
2、号:xxxxxxxxxxxxxxxxxxxxxx 二0一一年五月 socket编程一、 实验目的本次实验的目的是通过利用socket编写简单的客户/服务器程序,了解tcp/ip网络的基本通信原理和编程方法,初步掌握tcp/ip网络的传输层上的编程接口(windows sockets api),学会利用这些接口来编写简单的网络通信软件.二、 实验内容利用socket编写简单的客户/服务器程序,比如聊天室、文件传输等。三、 实验步骤 思路分析 将服务器与客户端分两部分实现,采用多线程实现多个客户端与服务器端连接 客户端建立一个socket与服务器端连接,成功后通过这个socket来发送和接收数据就
3、可以了。 服务器端通过创建一个socket的arraylist数组,与指定的本地端口绑定,就可以在端口进行侦听。如果有客户端连接请求,则在数组中选择一个空socket,将客户端地址赋给这个socket。然后登录成功的客户就可以在服务器上聊天了. 代码实现 package tcp_chat_room.gui; import java.io。ioexception; public class clientapp public static void main(string args) /* * javax.swing.uimanagerlookandfeelinfometal javax。swin
4、g。plaf。metal。metallookandfeel javax。swing。uimanagerlookandfeelinfonimbus com.sun.java.swing。plaf.nimbus。nimbuslookandfeel javax。swing.uimanager$lookandfeelinfocde/motif com.sun.java.swing.plaf。motif。motiflookandfeel javax.swing.uimanagerlookandfeelinfowindows com.sun。java。swing。plaf.windows。windowsl
5、ookandfeel javax.swing。uimanagerlookandfeelinfowindows classic com。sun.java。swing。plaf。windows。windowsclassiclookandfeel author administrator */ try /使用nimbus皮肤 uimanager.setlookandfeel(com。sun。java。swing.plaf。nimbus。nimbuslookandfeel); /localhost 或 clientframe frclientframe = new clientfra
6、me(localhost”,server。chat_room_port); frclientframe。setconnected(true); frclientframe。setvisible(true); /如果登录成功 if(frclientframe.login(”222”)) frclientframe。receivemessage(); catch (classnotfoundexception e) e.printstacktrace(); catch (instantiationexception e) e.printstacktrace(); catch (illegalacc
7、essexception e) e。printstacktrace(); catch (unsupportedlookandfeelexception e) e。printstacktrace(); catch (ioexception e) e.printstacktrace(); package tcp_chat_room.action;import java.awt。awtexception;public class clientframeaction extends windowadapterprivate clientframe frclientframe;public client
8、frameaction(clientframe frclientframe)this.frclientframe = frclientframe;public void windowiconified(windowevent e) if(systemtray.issupported()final systemtray system = systemtray.getsystemtray();image image = imagemanager.getimage(”piscreen。gif);final string tooltip = new string(大家聊天室”);final popup
9、menu popup = new popupmenu();final menuitem mirevert = new menuitem(”restore);final menuitem miaddfriends = new menuitem(add friends);final menuitem miremovefriends = new menuitem(remove friends);final menuitem mimodifyfriendsinfo = new menuitem(modify friends infomation”);final menuitem misearch =
10、new menuitem(search friends);final menuitem miexit = new menuitem(”exit);popup.add(mirevert);popup.addseparator();popup。add(miaddfriends);popup.add(miremovefriends);popup。add(mimodifyfriendsinfo);popup.add(misearch);popup。addseparator();popup。add(miexit);final trayicon icon = new trayicon(image,tool
11、tip,popup);try system.add(icon);frclientframe.setvisible(false); catch (awtexception e1) system。out.print(”软件在系统通知区域显示出错);e1.printstacktrace();mirevert。addactionlistener(new actionlistener() public void actionperformed(actionevent e) system。remove(icon);frclientframe。setvisible(true);frclientframe.s
12、etstate(jframe。normal););miaddfriends。addactionlistener(new actionlistener() public void actionperformed(actionevent e) frclientframe.setvisible(true);frclientframe。setstate(jframe。normal););miexit。addactionlistener(new actionlistener() public void actionperformed(actionevent e) windowclosing(null);
13、);/不知何用icon。addactionlistener(mirevert.getactionlisteners()0);public void windowclosing(windowevent e) int result = messagebox。showconfirmmessage(”您确定要退出聊天系统吗?”);if(result = joptionpane.yes_option)frclientframe。disconnect();frclientframe。setvisible(false);frclientframe。dispose();/system.exit(0);else
14、/do nothingpackage tcp_chat_room。gui;import java。awt.color;public class clientframe extends jframe private boolean connected = false;private int port;private string host;private socket s;private datainputstream dis;private dataoutputstream dos;public datainputstream getdis() return dis;public dataou
15、tputstream getdos() return dos;private final jpanel panel = new jpanel();private final jpanel pnlchatarea = new jpanel();private final imageicon imagesetting = imagemanager。geticon(setting。gif);private final jlabel lblsettingimage = new jlabel(imagesetting);private final jpanel pnlsetting = new jpan
16、el();private final jpanel pnlinputarea = new jpanel();private final jbutton bnclose = new jbutton(关闭”);private final jbutton bnsend = new jbutton(”发送);private final jtextarea txtchatarea = new jtextarea(6,15);private final jtextarea txtinputarea = new jtextarea(2,15);private final dimension mindimen
17、sion = new dimension(300, 413);public boolean isconnected() return connected;public void setconnected(boolean connected) this。connected = connected;public jtextarea gettxtchatarea() return txtchatarea;public jtextarea gettxtinputarea() return txtinputarea;public clientframe(string host,int port) thr
18、ows ioexception this。host = host;this。port = port;s = new socket(host,port);dos = new dataoutputstream(s.getoutputstream());dis = new datainputstream(s.getinputstream();initcomponents();private void initcomponents() this.settitle(大家聊天室”);this.setsize(mindimension);this。setdefaultcloseoperation(jfram
19、e。do_nothing_on_close);getcontentpane().setlayout(null);panel。setbounds(0, 0, 292, 379);getcontentpane()。setbackground(color。light_gray);getcontentpane()。add(panel);panel。setlayout(null);pnlchatarea.setbounds(0, 0, 292, 226);jscrollpane jspchatarea = new jscrollpane(txtchatarea);jspchatarea.setautos
20、crolls(false);pnlchatarea。add(jspchatarea);panel.add(pnlchatarea);pnlchatarea。setlayout(null);txtchatarea。setlinewrap(true);txtchatarea.seteditable(false);/pnlchatarea。setbounds(10, 10, 272, 206);jspchatarea.setbounds(10, 10, 272, 206);pnlsetting.setbounds(0, 235, 292, 45);pnlsetting。add(lblsettingi
21、mage);panel。add(pnlsetting);pnlinputarea。setbounds(0, 279, 292, 67);jscrollpane jspinputarea = new jscrollpane(txtinputarea); pnlinputarea.add(jspinputarea);panel.add(pnlinputarea);pnlinputarea.setlayout(null);txtinputarea。setlinewrap(true);/pnlinputarea。setbounds(10, 10, 272, 47);jspinputarea。setbo
22、unds(10, 10, 272, 47);bnclose.addactionlistener(new actionlistener() public void actionperformed(actionevent e) /按下关闭按钮则直接退出聊天室exitsystem(););bnclose。setbounds(99, 356, 74, 23);panel。add(bnclose);bnsend。addactionlistener(new sendactionlistener(this);bnsend.setbounds(197, 356, 74, 23);bnsend.setmnemo
23、nic(0);panel.add(bnsend);this。setminimumsize(mindimension);this.addwindowlistener(new clientframeaction(this);/this。getrootpane().setdefaultbutton(bnsend);public boolean login(string nickname)try dos。writeutf(”login_” + nickname);int loginresult = dis.readint();if(loginresult = 1)system。out。println(
24、登陆成功,欢迎进入聊天室!);return true;else if(loginresult = -1)system。out。println(登陆失败,没有以login_开头”);return false;else if(loginresult = 2)system.out。println(”登陆失败,用户昵称已经存在!”);return false; catch (ioexception e) e.printstacktrace();return false;private class sendactionlistener implements actionlistenerprivate c
25、lientframe frclientframe; public sendactionlistener(clientframe frclientframe)this。frclientframe = frclientframe;public void actionperformed(actionevent e) string saying = frclientframe.gettxtinputarea()。gettext();/system。out.println(saying); frclientframe.gettxtinputarea().settext(null);try frclien
26、tframe.getdos().writeutf(saying);frclientframe.getdos()。flush(); catch (ioexception e1) e1.printstacktrace();public void exitsystem()new clientframeaction(this).windowclosing(null);public void disconnect() try this.setconnected(false);dos。close();dis.close();s.close(); catch (ioexception e3) e3。prin
27、tstacktrace();public void receivemessage()new thread(new threadreceivemessage(this).start();private class threadreceivemessage implements runnableprivate clientframe frclientframe;public threadreceivemessage(clientframe frclientframe)this。frclientframe = frclientframe;string message = ”;public void
28、run() try while(isconnected())message = dis.readutf();system.out.println(message);frclientframe。txtchatarea.append(message + n);thread.sleep(100); catch (ioexception e) e.printstacktrace(); catch (interruptedexception e) terrupted();package tcp_chat_room.gui;import javax.swing。joptionpane;p
29、ublic class messagebox public static void showwarningmessage (string message) /confirmdialog是可选是或否的对话框/joptionpane。showconfirmdialog(null, message, ”温馨提示”, joptionpane.warning_message);joptionpane.showmessagedialog(null, message, ”温馨提示”, joptionpane。warning_message);/joptionpane.showmessagedialog(nu
30、ll, message);public static void showerrormessage(string message)joptionpane。showmessagedialog(null, message, ”错误提示”, joptionpane.error_message);public static int showconfirmmessage(string message)return joptionpane。showconfirmdialog(null, message, 温馨提示, joptionpane。yes_no_option,joptionpane。error_me
31、ssage);package tcp_chat_room.gui;import java.io.datainputstream;import java。io。dataoutputstream;import java。io。ioexception;import 。serversocket;import 。socket;import .socketexception;import java。util。collection;import java.util.collections;import java.util。hashtable;import ja
32、va.util.iterator;import java。util。map;public class server public static final int chat_room_port = 44444;private int port;private serversocket ss;private socket socket;private datainputstream dis;private dataoutputstream dos;private mapsocket, string clients = collections.synchronizedmap(new hashtab
33、lesocket, string());public server(int port) throws ioexception ss = new serversocket(port);public boolean containedinclients(string tempname) collection names = clients。values();iteratorstring it = names。iterator();while (it。hasnext()) string existedname = it。next();if (existedname = tempname) retur
34、n true;return false;/ public void validatalogin() throws ioexception/ public void start() throws ioexception while (true) socket = ss。accept();new thread(new clientthread(socket))。start();private class clientthread implements runnable private socket client;public clientthread(socket client) this。cli
35、ent = client;public void run() try dis = new datainputstream(client.getinputstream());dos = new dataoutputstream(client。getoutputstream()); catch (ioexception e1) e1.printstacktrace();try / 处理用户的登录信息string loginmessage = dis.readutf();string nickname = loginmessage.substring(6);if (loginmessage。star
36、tswith(”login_)) boolean existed = containedinclients(nickname);if (existed) dos。writeint(2); else / 用户昵称还不存在,故登陆成功dos.writeint(1);clients.put(client, loginmessage);sendtoallmessage(nickname + 进入聊天室!);string message;try while (true) dis = new datainputstream(client。getinputstream();dos = new dataoutputstream(client。getoutputstream(); message = dis。readutf(); if(message != null) sendtoallmessage(nickname + 说:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国数字显示拼接墙行业竞争状况及投资发展前景研究报告
- 个人廉洁教育心得体会
- 进行在线阅读教学设计及反思
- 餐厅服务员高级模拟考试题与参考答案
- 江西省宜春第九中学2025届高三最后一卷英语试卷含答案
- 2025届江西省奉新一中、南丰一中等六校重点中学高三下第一次测试英语试题含答案
- 江苏省扬州市扬州中学2024-2025学年高一下学期4月期中考试化学试题(原卷版+解析版)
- 海洋石油钻探深海资源探测技术考核试卷
- 森林改培技术对水资源节约利用的启示考核试卷
- 玩具行业的市场趋势预测考核试卷
- 《团体标准 碳纤维复合芯导线配套金具技术条件 第2部分:接续管》
- 2024年国家义务教育质量监测-八年级心理健康考核试题
- 奇异的仿生学智慧树知到期末考试答案2024年
- 2024年度-绘本故事《井底之蛙》
- 《工程力学》课件-08 轴向拉(压)杆的轴力分析计算并绘制轴力图
- 中考历史《中国近代史》复习课件
- 2024年济南城市发展集团投资开发有限公司招聘笔试参考题库含答案解析
- 粮食熏蒸操作要点培训课件
- ERCP围术期麻醉安全管理
- 同等学力申硕-同等学力(政治学)笔试(2018-2023年)真题摘选含答案
- 园林植物的识别与应用-灌木园林植物的识别与应用
评论
0/150
提交评论