环境:1个Server, 1个Client。Server在公网上,IP固定,Client在小区内,IP由路由器自由分配。
这样一个设计:服务器与客户间开通两个socket通道。服务器与客户端均开通一个端口监听。开通socket顺序如下:先由客户端向服务器发起请求,开通一个socket通道;连通后,服务器取出客户端的ip地址与客户端开放的端口,然后主动去连接客户端监听的端口。
如果服务器与客户端都在一个网段内,那么完全不存在问题。
问题是,当客户端出小区网,进入公网时,会通过路由器进行地址转换与端口映射。连接到服务器以后,客户端的IP在连接未断的时候不会变,但是端口呢? 客户端开放一个端口,出小区网后就是另外一个端口了,这之间的映射关系,服务器根本就不知道,所以没办法主动的连接上客户端的端口。
汗。咋办呢?
socket也可以双工,但是,貌似现在的通讯模块要作大量修改。
没时间啊。