ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:149.19KB ,
资源ID:3840003      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3840003.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(点对点数据交换P2P.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

点对点数据交换P2P.docx

1、点对点数据交换P2P内容提要这次计算机网络课程设计,我们小组做的题目是点对点数据交换(P2P):实现基于服务器转发的任意多点间的数据共享与交换,具体来说,我们的目标是做一个简单的局域网聊天程序。第一部分 需求分析第二部分 总体设计第三部分 详细设计第四部分 参考文献第五部分 系统编码实现一 需求分析P2P,英文Peer-to-Peer的缩写,中译为对等互联或点对点技术。P2P技术可以让用户可以直接连接到其他用户的计算机,进行文件共享与交换,同时P2P在深度搜索、分布计算、协同工作等方面也大有用途。 简单地说,P2P就是一种用于不同PC用户之间,不经过中继设备直接交换数据或服务的技术,它允许In

2、ternet用户直接使用对方的文件。每个人可以直接连接到其他用户的计算机,并进行文件的交换,而不需要连接到服务器上再进行浏览与下载。 目前Internet的存储模式是内容位于中心,而P2P技术的运用将使Internet上的内容向边缘移动。这将带来以下改变: 首先,客户不再需要将文件上传到服务器,而只需要使用P2P与其他计算机进行共享; 其次,使用P2P技术的计算机不需要固定的IP地址和永久的Internet连接,这使得占有极大比例的拨号上网用户也可以享受P2P带来的变革。(1)系统目的,要求我们小组做的题目是点对点数据交换(P2P):实现基于服务器转发的任意多点间的数据共享与交换,具体来说,我

3、们的目标是做一个简单的局域网聊天程序,要实现的功能如下:1 用户应该可以注册,选择服务器登陆。2 实现多对多聊天。3 客户端程序应该可以实时显示目前登陆该服务器的客户,4 有一个简单,便于操作的界面。(2)操作流程用户操作流程:客户端与服务器端通信流程:(3)开发工具与开发平台开发语言:JAVA 开发环境:eclipse 3.2 ,Windows XP二 总体设计(1) 系统功能该系统的主要功能是实现多个用户之间在同一服务器上的客户之间的数据共享。是基于服务器转发的。采用线程池技术,每发起一个连接,就创建一个线程,连接结束后,线程结束,并有一个线程计数器,每隔一定时间就刷新数据。(2)系统架构

4、采用C/S模式,各个用户通过服务器转发实现P2P聊天的功能(3)模块划分分为两大模块:客户端模块和服务器端模块。客户端模块的主要功能:1登陆功能:用户可以注册,然后选择服务器登入聊天室。2 显示用户:将在线用户显示在列表中。3接收信息:能接收其他用户发出的信息。4发送信息:能发出用户要发出的信息。服务器端模块的主要功能:1 检验登陆信息:检查登陆信息是否正确,并向客户端返回登陆信息,如信息正确。就允许用户登陆。2 显示在线状态:将该用户的状态发给各在线用户。3 转发聊天信息:将消息转发给所有在线的用户。三 详细设计(1)系统数据结构1、服务器:负责处理各个客户端的信息,并负责将信息进行转发。、

5、 服务器主要负责响应客户端的的各种信息,包括用户的登陆,用户的注册,各个客户端的信息相互转发。、 服务器的实现有以下几个类构成:AppServer类,Connect类,其中AppServer类主要是进行初始化的工作,Connect类负责对用户登陆信息,各个客户端信息的处理。2、 客户端:用户使用界面,负责接受信息以及与服务器进行通信。、 客户端负责为用户提供登陆界面,将信息发送至服务器,接受服务器的反馈信息等一系列的工作。、 客户端的实现有以下几个类构成:clientInt类,TimerAction类。clientInt类进行登陆界面初始化的工作,TimerAction类负责与服务器,其它客户

6、端进行通信。(2)协议结构程序采用UDP用户数据报协议(User Datagram Protocol)来实现数据的传送。用户数据报协议(UDP)是 ISO 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 UDP 协议基本上是 IP 协议与上层协议的接口。 UDP 协议适用端口分辨运行在同一台设备上的多个应用程序。 由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 UDP 的“端口号”完成的。例如,如果一个工作站希望在工作站 128.1.123.1 上使用域名服务

7、系统,它就会给数据包一个目的地址 128.1.123.1 ,并在 UDP 头插入目标端口号 53 。源端口号标识了请求域名服务的本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。 UDP 适用于不需要 TCP 可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。 UDP 是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)

8、以及简单文件传输系统(TFTP)。 Source Port 16位。源端口是可选字段。当使用时,它表示发送程序的端口,同时它还被认为是没有其它信息的情况下需要被寻址的答复端口。如果不使用,设置值为0。 Destination Port 16位。目标端口在特殊因特网目标地址的情况下具有意义。 Length 16位。该用户数据报的八位长度,包括协议头和数据。长度最小值为8。 Checksum 16位。IP 协议头、UDP 协议头和数据位,最后用0填补的信息假协议头总和。如果必要的话,可以由两个八位复合而成。 Data 包含上层数据信息。 (3)数据流程图(4)实验效果图登陆:注册:聊天:四 参考文

9、献【1】计算机网络第4版 谢希仁 电子工业出版社 2003年.6月【2】用TCP/IP进行网络互联(第一卷)D.E.Comer 电子工业出版社 2004年.11月第四版【3】TCP/IP网络原理与技术 周明天、汪文勇 :清华大学出版社: 1993【4】JAVA程序设计之网络编程 李芝兴、杨瑞龙 清华大学出版社 2006年3月五 系统编码实现:服务器代码:package chat;/导入相关包import java.awt.event.*;import .*;import java.io.*;import java.util.*;import javax.swing.Timer;/AppServ

10、er类代码public class AppServer implements RunnableServerSocket server;/创建绑定到特定端口的服务器套接字Socket fromClient;Thread serverThread;public static final int PORT = 8080;public AppServer()System.out.print(聊天服务器已经启动.);tryserver = new ServerSocket(PORT);serverThread = new Thread(this); /创建AppServer的线程实例serverThre

11、ad.start();catch (Exception e)System.out.println(不能启动该线程: + e);/ 构造AppServer结束public void run()trywhile (true)/监听客户端的请求fromClient = server.accept();/建立连接对象 Connect con = new Connect(fromClient);catch (Exception e)System.out.println(不能监听客户请求 + e);public static void main(String args)new AppServer();/

12、AppServer类定义结束/connect类代码class ConnectObjectOutputStream streamToClient;BufferedReader streamFromClient;boolean status = false;static Vector vector;/聊天信息static Vector userList;static String str = new String(用户列表);String message = ;staticvector = new Vector(1, 1);userList = new Vector(1, 1);userList.

13、addElement(String)str);public Connect(Socket inFromClient)/提取客户端的流String msg = ;trystreamFromClient = new BufferedReader(new InputStreamReader(inFromClient.getInputStream();streamToClient = new ObjectOutputStream(inFromClient.getOutputStream();msg = streamFromClient.readLine();if (msg.equals(Timer)

14、/延迟信息streamToClient.writeObject(vector);streamToClient.writeObject(userList);else if (msg.equals(LoginInfo) /登录信息msg = streamFromClient.readLine();boolean IsOk = verify(msg);if (IsOk = true)String colon = new String(:);int index = (String)msg).lastIndexOf(colon);String userName = (String)msg.substri

15、ng(0, index);/从第一个字符开始截取字符串,得到用户名if (userList.indexOf(String)userName) 0) streamToClient.writeObject(Welcome);elseuserList.addElement(String)userName); /是新注册的用户则添加进入用户列表elsestreamToClient.writeObject(Login Failed);else if (msg.equals(RegisterInfo) /注册信息 msg = streamFromClient.readLine();boolean IsEx

16、ist = checkUser(msg);if (IsExist = true)streamToClient.writeObject(User Exists);elseFileOutputStream out = new FileOutputStream(G:UsrPwd.txt, true);PrintStream p = new PrintStream(out);p.println();p.println(msg);p.close();streamToClient.writeObject(Registered);else if (msg.equals(User Logout)String

17、remUser = streamFromClient.readLine();boolean b = userList.removeElement(String)remUser);elsemessage = message + msg;vector.addElement(String)message);streamToClient.writeObject(vector);/end of trycatch (Exception e)System.out.println(无法获取客户端的流对象 + e);finally /关闭套接字tryinFromClient.close();catch (IOE

18、xception e) /Connect()函数结束boolean verify(String mesg)tryRandomAccessFile RAS = new RandomAccessFile(G:UsrPwd.txt, r);int i = 0;String str = ;while (RAS.getFilePointer() != (RAS.length()str = RAS.readLine();if (str.equals(mesg)status = false;return status;RAS.close();catch (Exception e)System.out .pr

19、intln (用户数据丢失);/存储用户认证文本丢失return status;/verify()函数结束boolean checkUser(String mesg)boolean IsExist = false;/检测是否存在相同用户名,存在为TRUEtryRandomAccessFile RS = new RandomAccessFile(G:UsrPwd.txt, r);int i = 0;String str = ;String colon = new String(:);int index = (String)mesg).lastIndexOf(colon);String userN

20、ame = (String)mesg.substring(0, index);while (RS.getFilePointer() != (int)(RS.length()str = RS.readLine();int index1 = (String)str).lastIndexOf(colon);String usrName = (String)str.substring(0, index1);if (usrName.equals(userName)IsExist = true;break;/while结束RS.close();/try块结束catch (Exception e)retur

21、n IsExist;/chkFile()函数结束客户端代码:package chat;import java.io.*;import .*;import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.util.*;import javax.swing.Timer;public class clientInt extends JFrame implements ActionListener Timer t = new Timer(5000,new TimerAction(); String usr_name

22、; public String remUser;/InetAddress IPadr = InetAddress.getByAddress(127,0,0,1);/String IPadr = localhost;class TimerAction implements ActionListener Socket toServer; ObjectInputStream streamFromServer; PrintStream streamToServer; public void actionPerformed(ActionEvent e2) trytoServer = new Socket

23、(Login.IPadr, AppServer.PORT );streamFromServer = new ObjectInputStream(toServer.getInputStream();streamToServer = new PrintStream(toServer.getOutputStream();message = txtMsg.getText();/向服务器发送一消息streamToServer.println(Timer);/从服务器端接收Vector向量Vector vector = (Vector)streamFromServer.readObject();/接收消息

24、Vector vector1 =(Vector)streamFromServer.readObject();/接收用户/显示在线用户 txtListUsers.setText();for(int j = 1;jvector1.capacity(); j+)txtListUsers.append (String)vector1.elementAt(j);txtListUsers.append(n); /显示该消息 int i = messageCount; for(;i vector.capacity();i+) txtMessages.append(String)vector.elementA

25、t(i);txtMessages.append(n); messageCount = i; / try块尾catch(Exception e) /System.out.println(产生异常 +e); / actionPerformed函数尾 / TimerListener类结束int messageCount = 0; /消息数量String name; PrintStream streamToServer; ObjectInputStream streamFromServer; Socket toServer;JTextArea txtMessages; JTextArea txtLis

26、tUsers; JTextField txtMsg; JButton msgSendBtn; JButton userLoginBtn; JButton userRegisterBtn; JButton userLogoutBtn;JLabel lblChatRoom; JLabel lblUserList;JScrollPane jspSendMsgPane; JScrollPane jspTxtMsgPane; JScrollPane jspUserListPane;JTextField textWriteMsg; String message; int nSend;public clie

27、ntInt(String nm)remUser = nm; usr_name = nm; this.setTitle(聊天室: +usr_name); /设定窗体标题 JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout(); GridBagConstraints gbCons = new GridBagConstraints();gbCons.gridx = 0; gbCons.gridy = 0; lblChatRoom = new JLabel(聊天室, SwingConstants.LEFT); panel.add(lblChatRoom, gbCons);gbCons.gridx = 1; gbCons.gridy = 0;lblUserList = new JLabel(在线用户, SwingConstants.LEFT); panel

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1