
正文
关于p2p服务端java代码的信息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Java Socket 实现P2P
主动发起的会话的可以看成Client用socket、、被动接受的看成Server用ServerSocket、、、按你的做法、、A既有socket还有ServerSocket、、、socket用来主动连接其他客户端、、、ServerSocket用于监听其他客户端是否发来连接请求
相关问答
Q1: java能不能实现P2P下载平台
可以p2p服务端java代码的p2p服务端java代码,看这个文章:
还有这个:
Q2: 基于java的p2p实现文件共享和传输
在JAVA中,发送和接收多播信息的方法:
发送多播信息需经历步骤
确定发送的具体信息内容
String msg = "Hello";
选用专门为多播指定的D类IP地址(224.0.0.1到239.255.255.255),创建一个多播组
InetAddress group = InetAddress.getByName("228.5.6.7");
使用指定的端口(一般选1024以上的端口号)建立多播套接字
MulticastSocket s = new MulticastSocket(6789);
加入多播组
s.joinGroup(group);
创建一个数据报封装多播信息
DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
group, 6789);
发送
s.send(hi);
接收多播信息的步骤
开辟接收缓冲区
byte[] buf = new byte[1000];
创建接收数据报
DatagramPacket recv = new DatagramPacket(buf, buf.length);
接收
s.receive(recv);
注意:以上发送和接收程序在同一个文件中实现,若在不同文件中实现则应分别定义多播套接字并加入多播组。
3.与已知IP和端口的端点通信
在互联网上主要采用TCP和UDP来实现两点之间的通信。采用TCP可可靠传送信息,但花费时间较多;采用UDP可快速传递信息,但不能保证可靠传递。
JAVA实现TCP通信的方法 :
利用Socket(InetAddress addr, int port)和 Socket(String host, int port),创建客户端套接字,利用ServerSocket(int port)创建服务器端套接字,port端口就是服务器监听连接请求的端口,通过调用accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。通过调用Socket的 getInputStream()方法获得输入流读传送来的信息,也可能通过调用Socket的 getOutputStream()方法获得输出流来发送消息。
JAVA实现UDP通信的方法 :
使用DatagramPacket(byte [] buffer, int length, InetAddress addr, int port) 确定数据包数组、数组的长度、数据包的地址和端口信息。使用DatagramSocket()创建客户端套接字,而服务器端则采用DatagramSocket(int port),调用send(DatagramPacket dgp)和 receive(DatagramPacket dgp)来发送和接收数据包。本文设计的程序采用UDP。
P2P(Peer-to-Peer 端到端)模型是与C/S(客户/服务器)模型相对应。基于C/S的用户间通信需要由服务器中转,在C/S中的服务器故障将导致整个网络通信的瘫痪。。而基于P2P的用户间通信则是直接通信,去掉了服务器这一层,带来的显著优点是通信时没有单一的失败点,一个用户的故障不会影响整个P2P网络。本文提供了一种用JAVA实现P2P网络通信的方法。
Q3: Android p2p简单实现
p2p 技术,可以让具备相应硬件的 Android 4.0(API 级别 14) 或更高版本设备在没有中间接入点的情况下,通过 wlan 进行直接互联。使用这些 api ,您可以实现支持 wlan p2p 的设备间相互发现和连接,从而获得比蓝牙连接更远距离的高速连接通信效果。对于多人游戏或照片共享等需要在用户之间共享数据的应用而言,这一技术非常有用。
一个设备上可以有多个 p2p 服务存在,通过 addLocalService 可以在设备上发布自己的 p2p 服务,通过 removeLocalService 可以移除自己的 p2p 服务
serviceName 是服务的名字,可以自定义,这里设置为 DON_TEST
serviceType 是服务类型,格式为 _protocol._transportlayer ,表示协议+传输类型。
例如:
p2p 设备信息及连接状态的变化,需要通过监听系统广播来实现,常用到的广播有以下几个:
通过方法 discoverPeers 可搜索设备周围的p2p设备
discoverPeers 会触发广播 WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION ,收到此广播后,通过方法 requestPeers 可获取周边 p2p 设备列表
通过 一、服务发布 ,发布了一个名为 DON_TEST 的服务,通过 discoverServices 方法就可以搜索到这个服务,同时需要通过 setDnsSdResponseListeners 方法设置监听 WifiP2pManager.DnsSdServiceResponseListener 和 WifiP2pManager.DnsSdTxtRecordListener ,在搜索过程中这两个监听会回调搜索到的服务信息。
WifiP2pManager.DnsSdServiceResponseListener 用于监听搜索到的服务信息
WifiP2pManager.DnsSdTxtRecordListener 用于获取服务发布携带的额外信息,例如 一、服务发布 中的携带的信息 port 8888
通过 WifiP2pManager.DnsSdServiceResponseListener 可以搜索到可用的服务信息,通过方法 onDnsSdServiceAvailable 中的参数 WifiP2pDevice 可获取到服务所在的设备信息,通过 connect 方法可以连接该设备
connect 调用成功之后,如果是首次连接,对端手机会显示一个弹窗,用户选择允许连接之后,两部手机手机才能建立连接。
建立连接之后,系统会发送广播 WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION ,收到这个广播之后,可通过 requestConnectionInfo 方法获取连接信息 WifiP2pInfo ,通过 WifiP2pInfo 可获取对方的 ip
连接到了一起,此时系统会自动创建一个群组 (Group) 并随机指定一台设备为群主 (GroupOwner) 。此时,对于两台设备来说,群主的 IP 地址是可知的(系统回调函数中有提供),但客户端的 IP 地址需要再来通过其他方法来主动获取。
可以通过创建群组,指定某台设备作为服务器端(群主),即指定某台设备用来接收文件,因此,服务器端要主动创建群组,并等待客户端的连接。
server端
客户端
在两部手机通过 p2p 连接之后,客户端传输文件到服务端
参考:
Q4: 广域网实现p2p文件传输 如何实现nat穿透 求java或C++源代码
假设有两台分别处于各自的私有网络中的主机:A和B;N1和N2是两个NAT设备;S是一个使用了一个众所周知的、从全球任何地方都能访问得到的IP地址的公共服务器
步骤一:A和B分别和S建立UDP连接;NAT设备N1和N2创建UDP转换状态并分配临时的外部端口号
步骤二:S将这些端口号传回A和B
步骤三:A和B通过转换好的端口直接联系到对方的NAT设备;NAT设备则利用先前创建的转换状态将分组发往A和B
源码已发送请查收
Q5: 如何使用java实现tcp的p2p的打洞技术
公网设服务器S, 2p点(P1.P2) 连S,过S双方获取对方公网IP.
P1 P2都向对方的(公网IP+任意端口)发起连接,当然无任何回应,但是会发生2件事
1 P1 P2都在自己的外网NAT上打了个连接对方的洞,这个洞会保持一会儿.
2 连接的时候S抓取到P1 P2 的NAT端口,然后将此端口发送给对方,
然后就可以想办法连接了.
关于p2p服务端java代码和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







