情况:多个客户端、一个服务器。1.客户端登陆,服务器登记用户的IP和PORT。登陆成功后客户有个定时器向服务器发送UDP信息,来保持在线。2.现在是当两个客户端要互相发信时,客户A根据客户端B的IP和PORT(服务器端取的)向客户B发送把洞命令,维持连线。问:
1.在测试中发现:用服务器端取的IP和PORT就可以实现互相正常通信了,请问客户A根据客户端B的打洞还有必要吗?2.还有就是创建一个scoket后,一个scoket就占一个端口?3.按上面方方法:客户A连服务器所用的端口,也可以用来客户端A和客户端B及其它客户端相连?对这方面不清楚,请各位指教下。

解决方案 »

  1.   

    有好多情况啊~
    A B 都在nat后面,一方在nat后面,在多层nat后面,... 情况多多 。问1 ,貌似没必要
    问2 ,洞打通后,就是和平常的skt通信一样的了
    问3 ,短时间内应该可以。打洞目的是在nat上留下两端IP端口的对应。对于不同协议不同nat,这个对应的保留时间也不同,在这个对应失效之前都是可以的。
      

  2.   

    另:大家一般情况下,udp打洞消息多长时间发一次?1S或多少?较可靠?
      

  3.   

    是这样的,UDP是可以穿透防火墙的,假设有服务器S,客户端A、B,A<->S,B<->S相互通信正常,假设A、B的防火墙开的话,A<->B就不一定
    能通信正常,也就是说不可靠,这时如果A、B间每隔一定时间进行相互捂手,则可有效解决这个问题,你可找两台计算机进行测试