由于我刚刚接触网络编程,有些问题不太明白问一下设: 有分别独立的局域网A、B,都有硬件防火墙。
A的Ip是 202.66.88.133
B的Ip是 202.28.111.185
A1代表A网中的一台机器:A={1,2,3,4,5....,N}
B1代表B网中的一台机器:B={1,2,3,4,5....,N}使用TCP协议通信端口是 12001,用WinSock2编程我有一个问题,A1向B2发送信息,目的IP地址应该是202.28.111.185 port是12001
这样发送过去肯定是要丢包的,因为B的NAT服务器不知道12001是谁,所以必须要在路由器(防火墙)做端口映射 让12001都发送到B2的内网IP上。那么我想问问QQ、MSN还有一些视频软件是怎么做的呢?  就是他们复用80端口,那怎么下发的呢?
谢谢

解决方案 »

  1.   

    不清楚QQ、MSN的具体做法,提一下大概思路:
    需要在公网上有一台服务器,所有客户端先登录到服务器,服务器上记录各个客户端的公网及内网的IP和端口号。当客户端之间需要通讯时,先向服务器发出申请,获得对方的IP地址和端口号,并由服务器通知对方,然后双方尝试各种方式连接(包括直接连接、UDP打洞),如果无法成功连接,则将数据发给服务器,由服务器再把数据转发给另一端。
      

  2.   

     QQ大部分的消息应该是转发的吧,要不安全性怎么考虑? 除了转发那就是P2P了
      

  3.   

    nat打洞啊,这个就是目前主流p2p软件穿透nat的技术,简单说来就是让服务器来协调两个nat,具体你可以查一查nat通信的原理,记住一点,网络上要传输必须要有nat临时分配公网地址的