计算机网络实验-点到点

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

河北大学工商学院计算机网络课程设计学部信息科学与工程学部专业计算机科学与技术班级计科2班学号2012484255姓名于和利2015年6月26日实验一:网络点对点聊天(20分)网络点对点聊天基于P2P(PeertoPeer,端对端)的网络连接,不需要服务器。主要实现双方的基于socket的网络字符串通信,使用TCP或UDP协议均可。摘要:本系统是java基于c/s模式的简易聊天室程序。聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。基于Java的聊天室是利用Eclipse开发包工具进行开发出的一款网络聊天室。这款聊天室是套接字通信开发采用c/s模式的聊天室程序。聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。关键词:JAVA聊天室服务器端客户端1、需求在当今的信息时代,越来越多的聊天工具被应用。Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。使用Java语言能够为小型的、嵌入式设备进行应用程序的开发。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。2、设计Java是一种简单的、性能很优异的语言。Java去掉了C++语言的许多功能,如:指针运算、结构、这让Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。而且,Java很小,整个解释器只需215K的RAM。因此运用JAVA程序编写聊天室,实现简单聊天功能。本设计做的是Java简单聊天室,它是图形界面、线程、流与文件等技术的综合应用,其界面主要采用了java.awt包,javax.swing包等。3.具体实现定义两个类,client类和server类,在server类定义一个socket,代码如下:服务器端代码:importjava.io.IOException;importjava.net.*;importjava.io.*;importjava.util.*;publicclassChatServer{booleanstarted=false;ServerSocketss=null;Clientc=null;ListClientclients=newArrayListClient();publicstaticvoidmain(String[]args){newChatServer().start();}publicvoidstart(){try{ss=newServerSocket(8888);}catch(IOExceptione){e.printStackTrace();}try{started=true;while(started){Sockets=ss.accept();c=newClient(s);System.out.println(aclientconneted);newThread(c).start();clients.add(c);//dis.close();}}catch(IOExceptione){e.printStackTrace();}finally{try{ss.close();}catch(IOExceptione){e.printStackTrace();}}}classClientimplementsRunnable{privateSockets;privateDataInputStreamdis=null;privateDataOutputStreamdos=null;booleanbConnected=false;publicClient(Sockets){this.s=s;try{dis=newDataInputStream(s.getInputStream());dos=newDataOutputStream(s.getOutputStream());bConnected=true;}catch(IOExceptione){e.printStackTrace();}}publicvoidsend(Stringstr){try{dos.writeUTF(str);}catch(IOExceptione){clients.remove(this);System.out.println(------);//e.printStackTrace();}}publicvoidrun(){try{while(bConnected){Stringstr=null;str=dis.readUTF();System.out.println(str);for(inti=0;iclients.size();i++){Clientc=clients.get(i);c.send(str);}}}catch(IOExceptione){//e.printStackTrace();System.out.println(Clientclosed!);}finally{try{if(dis!=null)dis.close();if(dos!=null)dos.close();if(s!=null){s.close();//s=null;}}catch(IOExceptione1){e1.printStackTrace();}}}}}客户端代码:importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.net.*;publicclassChatClientextendsFrame{Sockets=null;DataOutputStreamdos=null;DataInputStreamdis=null;booleanbConneted=false;TextFieldtfTxt=newTextField();TextAreataContent=newTextArea();ThreadtRecv=newThread(newRecvThread());publicstaticvoidmain(String[]args){newChatClient().launchFrame();}publicvoidlaunchFrame(){setLocation(400,300);this.setSize(300,300);add(tfTxt,BorderLayout.SOUTH);add(taContent,BorderLayout.NORTH);pack();this.addWindowListener(newWindowAdapter(){@OverridepublicvoidwindowClosing(WindowEvente){disconnect();System.exit(0);}});tfTxt.addActionListener(newTFListener());setVisible(true);connect();tRecv.start();}publicvoidconnect(){try{s=newSocket(127.0.0.1,8888);dos=newDataOutputStream(s.getOutputStream());dis=newDataInputStream(s.getInputStream());System.out.println(connected);bConneted=true;}catch(UnknownHostExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicvoiddisconnect(){try{dos.close();dis.close();s.close();}catch(IOExceptione){e.printStackTrace();}}privateclassTFListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){Stringstr=tfTxt.getText().trim();//taContent.setText(str);tfTxt.setText();try{dos.writeUTF(str);dos.flush();//dos.close();}catch(IOExceptione1){e1.printStackTrace();}}}privateclassRecvThreadimplementsRunnable{publicvoidrun(){try{while(bConneted){Stringstr;str=dis.readUTF();//System.out.println(str);taContent.setText(taContent.getText()+str+'\n');}}catch(SocketExceptione){System.out.println(退出了,bye!);}catch(EOFExceptione){System.out.println(退出了,bye-bye!);}catch(IOExceptione){e.printStackTrace();}}}}先启动server类,client端从server端接收字节流,首先要从socket获得一个inputstream;client类也同样的实现思想。实现的功能为client之间可以通过server端建立连接并相互发送消息,当对方登陆时,会提示“对方上线了!”当对方下线时,会显示“退出了,bye!”。4.截图显示:服务器端:客户端:聊天窗口:5、项目小结本系统主要以文字的形式进行网路传输,与之上线的聊天室相比,本系统的功能是比较简单的,但是通过本系统的开发,基本上体现了聊天的流程,用到了网络传输的基本知识及软件开发的过程。这个功能也是以后可以多样化功能的基础。随着社会的进步,聊天室将具有非常大的发展空间。但是也存在不足,更需要努力学习相关的知识。实验二:网络点对点文件传输(30分)网络点对点文件传输基于P2P(PeertoPeer,端对端)的网络连接,不需要服务器。主要实现双方的基于socket的网络文件双向传送,使用TCP协议。packagewenjian;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.OutputStream;importjava.net.ServerSocket;importjava.net.Socket;/**用TCP进行文件传输*此文件为服务器文件*当接受到客户端的请求之后,先向其传输文件名*当客户端接受完毕之后,向客户端传输文件**/publicclassSendFileServerimplementsRunnable{//服务器监听端口privatestaticfinalintMONITORPORT=12345;privateSockets;publicSendFileServer(Sockets){super();this.s=s;}publicstaticvoidserver(){try{//创建服务器socketServerSocketss=newServerSocket(MONITORPORT);inti=0;while(true){i++;//接收到一个客户端连接之后,创建一个新的线程进行服务//并将联通的socket传给该线程Sockets=ss.accept();System.out.println(服务器的线程+i+启动,与客户端1连接成功);

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功