如果客户端A在路由器下的局域网中,服务器B在公网上,
如果A使用TCP或UDP向B发送一个消息,那么用B的Socket.RemoteEndPoint读取到的是A所在路由器的NAT IP和端口号吗?
如果不是B怎么读取到A的NAT IP和端口号?
如果A使用TCP或UDP向B发送一个消息,那么用B的Socket.RemoteEndPoint读取到的是A所在路由器的NAT IP和端口号吗?
如果不是B怎么读取到A的NAT IP和端口号?
调试欢乐多
再找个路由器呗。不然你安装虚拟机,设置虚拟机为NAT网络方式也可以用来测试。
如果A使用的时UDP协议那么NAT端口号会改变吗?
你可以找一个NAT路由“打洞”的资料看看。关于前一个端口问题,其实不同的设备会有不同的处理。有的不变,有的每一次都变。
我的网络实在是试不了啊,当下也不知道怎么配置虚拟机。。
如果A的NAT 端口号一直在变动,服务器B想要给A回发消息,岂不是A就收不到了?
客户端与服务器的通信 需要客户端首先发起 也就是向服务器发送信息 建立一个通路 也就是"洞" 客户端才能成功接收服务器发送的信息 如由服务器直接发信息给客户端(客户端未发送过信息给服务器) 则服务器发送的信息将会被客户端抛弃
参考
另外找到了个类似的CSDN帖子,请看帖子中的3楼和4楼:
http://topic.csdn.net/u/20101205/14/3571a3f8-15aa-4ab8-86ae-6e2f0d5610e3.html
另外5楼那位大哥发的链接也很有用,是讲的“用C#编写获取远程IP,MAC的方法”,需要时可以参考下
关于NAT路由器打洞的详细原理和流程,请见参考文献:NAT路由器打洞原理 同时也可以查考:13楼那位大哥给出的连接此外我在11楼问的问题可以无视了,因为NAT端口变不变和协议面不面向连接无关,这个问题还是请看文献:NAT路由器打洞原理中NAT的四种类型部分
我是这么测试的, 一台内网NAT的下的PC(楼主所说的A), 向两台公网的服务器发包(TCP UDP), 两台服务器中得到的A的外网IP竟然不一样。
后面我去查了一下路由器当前的公网IP, 也不等于这两次测试结果的公网IP。
如果得到A的公网IP,本人进一步研究中。 也请高手支持一下, 顶一下贴。 谢谢!