在socket编程中希望在外网的客户端也能和服务端通信,路由器做了端口映射,请问服务端监听的ip应该填什么?是本地内网ip吗?然后客户端发送数据的目标ip又应该填什么?
测试中服务端填了内网ip,客户端的发送目标ip填了路由器wan口的ip,但是仍然不能通信,请问为什么
在socket编程中希望在外网的客户端也能和服务端通信,路由器做了端口映射,请问服务端监听的ip应该填什么?是本地内网ip吗?然后客户端发送数据的目标ip又应该填什么?
回答:服务器监听的ip就是自己的本机IP地址(内网IP),客服机发送目的应该填外网IP(公网IP,WAN口IP)。 网络链路如下:服务器IP----公网IP----客服机IP。
测试中服务端填了内网ip,客户端的发送目标ip填了路由器wan口的ip,但是仍然不能通信,请问为什么?
回答:分段检查问题:
1、3个IP是否能够ping通,来验证网络物理的联通性。
2、只ping通还不行,SOCKET是基于自己的端口工作,还要测试端口是否联通,可以用telent来测试SOCKET的端口通讯是否正常。
3、 路由器和服务器做的端口映射,应该是成对的,这里容易出问题,需要重点检查一下路由器是否正确端口映射了服务器的端口。
4、注意操作系统的防护墙,可能阻挡,需要关闭。
我的网络经验:1999年成功接通重庆市第一根ADSL网络,后用C#+HP-SOCKET完成了自己的聊天服务器。
我的CSDN BLOG百度: 刘欣 CSDN
如果都通过外网,那客户端和服务端的IP都要填外网的,不能填内网IP
肯定填服务器的内网ip,因为路由器dnat已经把目的ip由路由器wan口ip改成内网服务器ip了,不能通信可以逐段抓包,看看服务器是否收到,是否回了没有,没有回,检查路由等信息,回了但对方没有收到,检查路由器的alg和snat设置。
问题已解决,检查发现电信分给wan口的ip是电信内网的ip,不是一个公网ip