问题如下:
clientA(简称A)通过代理proxyA(简称PA)连接到服务器(同时有TCP连接和UDP连接),服务器记录A在公网的映射IP和端口(简称A.IP和A.Port)
同理clientB相同情况通过proxyB连接到服务器.现在A要与B通信,需要B先给A打个洞.但是B的UDP给A.IP+A.Port发送数据包的时候会出现错误,提示是connection reset by peer.不知道怎么回事.哪位达人给解答一下?同时也说说UDP穿透NAT的时候的一些问题吧.小子先谢了.
TCp连接用的是
IDTCPServer和IDTCPClient.UDP通信只用了IDUDPServer.
clientA(简称A)通过代理proxyA(简称PA)连接到服务器(同时有TCP连接和UDP连接),服务器记录A在公网的映射IP和端口(简称A.IP和A.Port)
同理clientB相同情况通过proxyB连接到服务器.现在A要与B通信,需要B先给A打个洞.但是B的UDP给A.IP+A.Port发送数据包的时候会出现错误,提示是connection reset by peer.不知道怎么回事.哪位达人给解答一下?同时也说说UDP穿透NAT的时候的一些问题吧.小子先谢了.
TCp连接用的是
IDTCPServer和IDTCPClient.UDP通信只用了IDUDPServer.
解决方案 »
- 数据库
- Panel中的TImage不能显示出来,高手请进。
- TStream如何创建?为什么TStream.create编译会有warning?
- 高分求助:请问高手,能不能在QUERY控件中的SQL语言中使用数据库名作为参数引入动态生成的数据库?
- Copy某個目錄下的全部文件,用什麼函數?
- 请问如何在程序中关闭一其它正在运行的软件?(在线等待)
- 谁有professional stand edition 6.3安装工具?
- L_jia进来领分11
- 问个门外汉问题!
- 名词解释:DNA架构
- delphi6中的Edit框中文本怎样右侧显示?谢谢
- 高分求购压缩算法压缩比至小要达到 2:1 ( 1000分, 得到解决后加分 )
A.IP和A.Port是A的UDP连接的映射IP和端口
那就不叫P2P了吧??
B在给A打洞的时候,需要服务器做一下周转。就A先发送一个不可能被B收到的UDP消息;
但是这个洞,就开了!然后把A这个洞的信息给服务器,服务器给B,B就可以利用这个洞了!p2P宣告成功。目前我也在做。敬请等候代码!
b给a发送udp包本来目的就是为了打这个洞,收不到很正常.但是之后a再给b发的udp包仍然是出了这个问题,还是没有让对方收到.如此下去两边还是不能通信啊.
这个洞要如何打??
littlefishli说的问题是
a->s,从而s知道了ip-a和port-a,同理,也知道了ip-b和port-b
然后a向ip-b:port-b发送一个消息,这个消息当然会被丢掉,但是a的NAT是不是应该已经搭好这个洞了,b再向ip-a:port-a发过来的消息a就能收到了呢?
我遇到了一种现象,就是a向server发送的port-a和它向其他客户端发送的port,经过NAT之后是不同的。比如a->s1,s1收到的是ip-a:port-a1,同时再运行一个s2,a->s2,s2收到的是ip-a:port-a2。那么这样的话,a->s与a->b的端口也是不同的,那么这样的洞该如何打?
a通过代理给b的代理发送udp数据包,a要怎么才能知道自己的代理分配的端口?
1.C1-->S1和C1-->C2时,NAT不会新生成一个端口,只会增加一个新的SESSION会话.这点让大家省了不少麻烦.(目前大多数都是这个类型的.)
2.C1-->S1后再C1-->C2时,NAT会重新分派一个新的端口,如C1-->(GATEWAY--NAT:3001)--S1,C1再发数据到C2时,端口可能变得3002或者其它,这时就比较麻烦,可以通过一个猜测法,但不能保证,也许是因为UDP本身就不能保证.
但所幸的是大多数情况都是情况1.
你说的A.IP,A.Port就是代理的,并不是你A的真正IP,Port!我在这里问一个问题 UDP通信只用了IDUDPServer是怎么回事?
难道你的Server端,Client端都用IDUDPServer控件,那么IDUDPServer和IDUDPServer能建立通信?
这个我还从来没有想过ps:如果是TCP的话好像难很多把,nat映射的端口有效是在连接的时候,断开后就无效了,你怎么处理?
A-->GateWay-->B:
A-->S: S.PeerIP为A的网关IP;
S-->B: S
to constantine(飘遥的安吉儿;
IDUDPServer更多的是接收功能,当然它也能发,无连接的.不管谁发的,只要能到达就能收.
IDUDPServer和IDUDPServer当然可以通信.
谈恋爱的过程一般是这样子的:
A-->B:A发了数据包给B,表示A送了一朵花给B,这时B有机会与A进行#@$%^&了.
基本上的原理就是,B要想和内网的A交流,必须先让A发一个给B的数据包,打这样一个洞,
但是有些NAT的类型为A-->S和A-->B发的数据NAT会分派不同的PORT,这个就比较痛苦了.希望大家进来讨论一下如何实现比较优良的P2P通信.....
vc有人做了一个模仿msn的软件,按作者说的几乎可以穿透一切nat,不过他就是没有怎么做的
软件叫:LinQ
这是要看对方的网关是怎么样的一个方式,如果是clon的话,你直接这样利用服务器给A B的公网的IP和端口的话,是没有用的,B的网关就会把A的数据给丢了,不安全嘛!
如果B的网关是Full Clon的话,就可以了!!所以P2P,在A这边是发两个信息的``一个通过服务器,另外一个直接发~~~