最近有空研究了下p2p,p2p主要解决了内网对内网直接通信问题。文章参考自
P2P 之 UDP穿透NAT的原理与实现(附源代码)
附带的源码虽然可以调试运行p2p成功发送消息,但是代码bug太多,改了几天 ,运行更加流畅,
然后把udt的源码加入,使用了udt的bind2 udp socket,p2p connect,增加了传输文件的功能,recv username filename
即可实现p2p传输文件,经过实际测试,双方内网都传输文件成功了,只是传输速度有点慢,快可以达到30多kb/s
慢就只有几kb/s 具体原因不知道是不是哪个测试机的网络wifi弱导致网速慢。
p2p过程如下---------------------------------------------------------------------------
第一、先在两个客户端上建立 UDP的socket, 并连接 server ,进行 UDP 的NAT 穿透,这些过程都是 普通的 UDP传输,与UDT 没有任何关系。
第二、在确定 两个NAT后的客户端能 穿透后(发送数据 双方都能接收到数据,此时是普通的UDP 发送 ,用Sendto),用这两个UDP的 socket 与
UDT的 socket,进行结合,步骤如下:
1) 在两个客户端分别建立一个 UDT socket ,用 UDT::socket(AF_INET, SOCK_DGRAM, 0);
2) 设置对这两个UDT的socket 进行 UDT_RENDEZVOUS 设置
3) 用bind(UDTSOCKET u, UDPSOCKET udpsock) 把UDP socket与 UDT socket 进行绑定
4)然后 用UDT 的connect 进行同时连接(两个客户端)。
5)用UDT::recvmsg 和 UDT::sendmsg进行接收和发送数据。即可
-----------------------------------------------------------------------------------------------------------
第一阶段 p2p传输文件没有问题了。那么接下来问题又来了,点对点udt模式 p2p后, 如何点对多传输。暂时还没有找到相关资料