怎么在两台都在网关内的机器通过Internet直接通讯?通过一个服务器转我已实现了(100分)

  • 主题发起人 主题发起人 am2001
  • 开始时间 开始时间
A

am2001

Unregistered / Unconfirmed
GUEST, unregistred user!
两地都是ADSL上网的,局域网内机子通过代理上网,我要实现两地局域网内的机子可以直接进行TCP/IP通讯,该怎么做?
现在我在客户端程序里放一个ClientSocket,在服务器上放一个ServerSocket,这样通过服务器转发是实现了
 
做個端口影射....
 
每台客户端经过网关转换后的端口可以取出来,现在我在每个客户端里只有一个ClientSocket控件,这样两个客户端之前怎么建立连接发消息呢?是不是有什么Socket函数啊?
 
tcp:
这个你要在网关主机上做一个端口映射,把一个端口映射到你的监听端口上,当然怎样的操作你要在网关主机上完成。或者你的网关支持Upnp的话,你也可以用Upnp来帮你做。
UDP:
如果你的网关不是对称NAT,那么你可以用下面的方法。
a想要连接b
a向b发一信息(这个时候,a的NAT记录下了a曾经向b请求信息)
a向服务器要求b向a发信息,b向a发信息
如果好运的话:a可以收到b发的信息,然后他们可以建立连接。(因为a的NAT有了记录,所以可以通过)
在上面的连接过程中,你的服务器应该保存有关于a,b向它通信的ip,port(NAT分配的)等信息提供给a,b

NAT对进入内网的数据转发有严格的要求,它只转发它“熟悉”的IP,PORT发过来的信息。
 
请问kkkchenA,用Upnp如何做?Upnp是什么
 
我现在a,b间通过服务器中转发消息是实现在,在服务器上我也都保存有a,b的IP与端口,a也可以知道b的IP与网关分配的端口,b也一样,但就是不知道只有这两个东东该怎么建立连接
 
关于UPnP可以去这里看看。
http://www.microsoft.com/technet/prodtechnol/winxppro/support/upnp01.mspx

to am2001
想要用TCP来建立连接,我想很难实现。用UDP协议的话,可以实现对Cone NAT的穿透。
想了解更多,你可以看看RFC 3489。
 
后退
顶部