当前位置:编程学习 > C#/ASP.NET >>

C# TCP打洞的问题

原理相信大家应该也知道,就是外网一台服务器S,两个不同内网分别一台客户端A,B,A与B分别于服务器S保持TCP连接,然后B要给A发信息,首先B向服务器发送连接请求(连接A),服务器接到B的请求,于是通知A向B打洞,A收到打洞通知,于是A向B的外网地址和端口(至于如何获得对方的外网地址和端口就不用说了)发动连接(这次连接基本上会失败,因为NAT设备积极拒绝,但NAT会记住A来连接过),A打洞完成之后,然后向服务器发送一条信息"打洞完成",然后服务器接到信息后,通知B连接A的外网地址和端口,...就是这样的一个过程,理论应该是没有错的,但是我在实现的过称中遇到了一个难题,
就是在客户端A和B分别与服务端S保持长连接的情况下,而且是在端口复用的情况下,A和B任意一方去相互连接,结果就会报一个"在一个已经连接的套接字上做了一个连接请求。",意思就是说A与服务器连接了,再不能与其他机器相连了,...好像是一个socket只能与一个服务器保持连接,在保持连接的情况下不能去连接其他服务器,有人说,把与服务器S的连接断开了再去连接B,但是这时候断开与服务器S的连接后,再去连接B,这是NAT会重新给A分配端口,这时候B之前所知道的A的地址和端口就没用了,B也无法知道A的新的端口,应为A已经与服务器S断开连接了...
不知道你遇到过这样的问题没.....
很纠结啊,纠结3星期了......
拿出所有积分,坐等高手出现....
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,