计算机网络P2P学习


title: p2plearning
date: 2020-07-13 15:25:07
tags: java

一 、P2P

计网的一个课设

基于P2P的局域网即时通信系统

1.实现一个图形用户界面局域网内的消息系统。

2.功能:建立一个局域网内的简单的P2P消息系统,程序既是服务器又是客户,服务器端口使用3000。

​ 2.1用户注册及对等方列表的获取:对等方A启动后,用户设置自己的信息(用户名,所在组);扫描网段中在线的对等方(3000端口打开),向所有在线对等方的服务端口发送消息,接收方接收到消息后,把对等方A加入到自己的用户列表中,并发应答消息;对等方A把回应消息的其它对等方加入用户列表。双方交换的消息格式自己根据需要定义,至少包括用户名、IP地址。

2.2发送消息和文件:用户在列表中选择用户,与用户建立TCP连接,发送文件或消息。

3.用户界面:界面上包括对等方列表;消息显示列表;消息输入框;文件传输进程显示及操作按钮或菜单。

p2p主要的实现前提是,两端应用要交互通信就必须知道对方的IP地址,因此为了获取两个通信方的IP,需要采用UDP多播的通信技术。

1.1 UDP广播

1.1.1 广播的概念

使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。

网络上的广播指:由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式。

1.1.2 广播的特点

​ 实现广播,离不开广播地址,同一个子网(局域网)的所有主机网卡都会接收所在网段广播地址的数据包。广播地址应用于局域网内的所有主机。广播地址(Broadcast Address)是专门用于同时向网络中(通常指同一子网)所有工作站进行发送的一个地址。

广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。值得强调的是:本地广播信息是不会被路由器转发。当然这是十分容易理解的,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。

其实广播顾名思义,就是想局域网内所有的人说话,但是广播还是要指明接收者的端口号的,因为不可能接受者的所有端口都来收听广播。

  • 可以向广播域内的所有主机发送数据 ;
  • 不能够跨越不同的网络,被路由器所隔离开。

1.2多播的特点

1.2.1 多播的概念

​ 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。

​ IP 多播(也称多址广播或组播)技术,是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次的,同时的)的 TCP/IP 网络技术。

1.3 UDP的java实现

DatagramSocket 和 DatagramPacket 两个类是 基于UDP 协议进行通信的包装类

实现两个客户端通过 UDP协议通信,使用DatagramSocket 和 DatagramPacket类

DatagramSocket 就相当于码头,DatagramPacket相当于海上的货物。

有如下几个步骤,分为客户端和服务端。

1,客户端:

1),实例化DatagramSocket类(带上指定端口),创建客户端

2),准备数据,数据是以字节数组发送的

3),打包数据,使用 DatagramPacket 类 + 服务器地址+ 端口

4),发送数据

5),关闭连接

2,服务端

1),实例化DatagramSocket类+指定端口

2),准备接收的字节数组,封装 DatagramPacket

3),接受数据

4),解析数据

5),关闭连接

二、P2P即使聊天实现逻辑

  1. 一个用户上线之后,用UDP向局域网内的所有用户广播一句消息“我上线了”,并打开自己的服务接入监听线程
  2. 用户收到“我上线了”或“我收到了”的消息之后把对应的用户名和ip地址存入自己的本地,然后回复“我收到了”,若是收到“我下线了,则把对应的用户移除”
  3. 在在线列表中点击一个用户时,发起TCP连接,新开一个聊天窗口,作为用户端与服务端通信。 另一边的用户检测到接入时新开一个聊天窗口,并作为服务端开始与客户端进行通信。

以上就是基本的实现逻辑。每一台机器叫做对等方。

猜你喜欢

转载自blog.csdn.net/qq_43263481/article/details/107363947