您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 惠州学院杨洪英网络通信编程实验报告
《网络通信编程》课程论文1、面向socket编程1.1.实验目的:1.1.1理解SOCKET的基本原理;1.1.2学会面向SOCKET编程的代码编写及理解各语句内容;1.1.3掌握面向SOCKET编程的具体应用。1.2.实验要求:1.2.1建立两个独立的面向SOCKET编程的JAVA工程,用于服务器和客户端系统;1.2.2建立SOCKET的JAVA类,并能正确运行且能实现SOCKET通信;1.2.3对JAVA类的功能进行拓广,使SOCKET用于某一具体的应用。1.3.实验内容1.3.1.建立服务器端工程和三个JAVA类,类程序的原代码为:importjava.io.*;importjava.net.*;importjava.util.*;publicclassChatServer{publicstaticvoidmain(Stringargs[]){ServerSocketserver=null;Socketyou=null;HashtablepeopleList;peopleList=newHashtable();while(true){try{server=newServerSocket(6666);}catch(IOExceptione1){System.out.println(正在监听);}try{you=server.accept();InetAddressaddress=you.getInetAddress();System.out.println(用户的IP:+address);}catch(IOExceptione){}if(you!=null){Server_threadpeopleThread=newServer_thread(you,peopleList);peopleThread.start();}else{continue;}}}}classServer_threadextendsThread{Stringname=null,sex=null;Socketsocket=null;Filefile=null;DataOutputStreamout=null;DataInputStreamin=null;HashtablepeopleList=null;Server_thread(Sockett,Hashtablelist){peopleList=list;socket=t;try{in=newDataInputStream(socket.getInputStream());out=newDataOutputStream(socket.getOutputStream());}catch(IOExceptione){}}publicvoidrun(){while(true){Strings=null;try{s=in.readUTF();if(s.startsWith(姓名:)){name=s.substring(s.indexOf(:)+1,s.indexOf(性别));sex=s.substring(s.lastIndexOf(:)+1);booleanboo=peopleList.containsKey(name);if(boo==false){peopleList.put(name,this);out.writeUTF(可以聊天:);Enumerationenu=peopleList.elements();while(enu.hasMoreElements()){Server_threadth=(Server_thread)enu.nextElement();th.out.writeUTF(聊天者:+name+性别+sex);if(th!=this){out.writeUTF(聊天者:+th.name+性别+th.sex);}}}else{out.writeUTF(不可以聊天:);}}elseif(s.startsWith(公共聊天内容:)){Stringmessage=s.substring(s.indexOf(:)+1);Enumerationenu=peopleList.elements();while(enu.hasMoreElements()){((Server_thread)enu.nextElement()).out.writeUTF(聊天内容:+message);}}elseif(s.startsWith(用户离开:)){Enumerationenu=peopleList.elements();while(enu.hasMoreElements()){try{Server_threadth=(Server_thread)enu.nextElement();if(th!=this&&th.isAlive()){th.out.writeUTF(用户离线:+name);}}catch(IOExceptioneee){}}peopleList.remove(name);socket.close();System.out.println(name+用户离开了);break;}elseif(s.startsWith(私人聊天内容:)){String悄悄话=s.substring(s.indexOf(:)+1,s.indexOf(#));StringtoPeople=s.substring(s.indexOf(#)+1);Server_threadtoThread=(Server_thread)peopleList.get(toPeople);if(toThread!=null){toThread.out.writeUTF(私人聊天内容:+悄悄话);}else{out.writeUTF(私人聊天内容:+toPeople+已经离线);}}}catch(IOExceptionee){Enumerationenu=peopleList.elements();while(enu.hasMoreElements()){try{Server_threadth=(Server_thread)enu.nextElement();if(th!=this&&th.isAlive()){th.out.writeUTF(用户离线:+name);}}catch(IOExceptioneee){}}peopleList.remove(name);try{socket.close();}catch(IOExceptioneee){}System.out.println(name+用户离开了);break;}}}}1.3.2.建立客户端工程和JAVA类,类程序的原代码为:importjava.awt.*;importjava.io.*;importjava.net.*;importjava.applet.*;importjava.util.Hashtable;publicclassClientChatextendsAppletimplementsRunnable{Socketsocket=null;DataInputStreamin=null;DataOutputStreamout=null;InputNameTextField用户提交昵称界面=null;ChatArea用户聊天界面=null;HashtablelistTable;Label提示条;Panelnorth,center;Threadthread;publicvoidinit(){intwidth=getSize().width;intheight=getSize().height;listTable=newHashtable();setLayout(newBorderLayout());用户提交昵称界面=newInputNameTextField(listTable);inth=用户提交昵称界面.getSize().height;用户聊天界面=newChatArea(,listTable,width,height-(h+5));用户聊天界面.setVisible(false);提示条=newLabel(正在连接到服务器,请稍等...,Label.CENTER);提示条.setForeground(Color.red);north=newPanel(newFlowLayout(FlowLayout.LEFT));center=newPanel();north.add(用户提交昵称界面);north.add(提示条);center.add(用户聊天界面);add(north,BorderLayout.NORTH);add(center,BorderLayout.CENTER);validate();}publicvoidstart(){if(socket!=null&&in!=null&&out!=null){try{socket.close();in.close();out.close();用户聊天界面.setVisible(false);}catch(Exceptionee){}}try{socket=newSocket(this.getCodeBase().getHost(),6666);in=newDataInputStream(socket.getInputStream());out=newDataOutputStream(socket.getOutputStream());}catch(IOExceptionee){提示条.setText(连接失败);}if(socket!=null){InetAddressaddress=socket.getInetAddress();提示条.setText(连接:+address+成功);用户提交昵称界面.setSocketConnection(socket,in,out);north.validate();}if(thread==null){thread=newThread(this);thread.start();}}publicvoidstop(){try{socket.close();thread=null;}catch(IOExceptione){this.showStatus(e.toString());}}publicvoidrun(){while(thread!=null){if(用户提交昵称界面.get能否聊天()==true){用户聊天界面.setVisible(true);用户聊天界面.setName(用户提交昵称界面.getName());用户聊天界面.setSocketConnection(socket,in,out);提示条.setText(祝聊天愉快!);center.validate();break;}try{Thread.sleep(100);}catch(Exceptione){}}}}1.3.3.调试使以上两个工程能正常运行,使服务端和客户端能正常通信登陆界面:聊天界面:1.4.实验心得其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身,而服务器通过accept方法就是同意和客户建立通讯.这样当客户建立Socket的同时。服务器也会使用这一根连线来先后通讯,那么既然如此只要我们存在多条连线就可以了2.基于UDP编程实验2.1.实验目的:2.1.1理解UDP及基于数据报通信的基本原理;2.1.2学会基于UDP编程的代码编写及理解各语句内容;2.1.3掌握基于UDP编程的具体应用。2.2实验要求:2.2.1建立两个独立的基于UDP编程的JAVA工程,用于服务器和客户端系统;2.2.2建立UDP的JAVA类,并能正确运行且能实现数据报通信;2.2.3对JAVA类的功能进行拓广,使基于UDP编程用于某一具体的应用。2.3实验内容:UDPserver关键代码:publicUDPServer(){addTableHead();JFrameframe=
本文标题:惠州学院杨洪英网络通信编程实验报告
链接地址:https://www.777doc.com/doc-4754529 .html