C# Socket通信问题:我写的服务器程序与本机的服务器程序可以通信,但与不同局域网的的服务端无法通信

当我把服务器的IP地址设定为“127.0.0.1”(本机)时,在我自己的电脑上有一个客户端程序,他们之间能够连接、并收发数据;但我的服务器程序若要连接一个非局域网的客户端,服务器运行到accept函数时就不再往下继续执行,很明显是没有建立连接,为什么会这样?我该怎么办?

肯定不会继续运行的,你应该理解socket机制.
当你的服务器端在listen后会主动accept客户端消息,他是处于阻塞状态的.
这时候,你再启动客户端进行connect到服务器端,服务器收到客户端连接请求才会继续执行下去.
通过recive/send方式发送数据.追问

您说的这点我知道,我的服务器通过bind()函数绑定的是无限网卡的IP地址,要跟服务器连接的是一个DTU(data transfer unit),DTU一直是接通的,它会不断的发送连接请求,DTU的连接请求通过无线网被无线网卡接收,按理说,服务器是可以接收到它的连接请求的,但实际调试时发现在accept这个地方终止。您看看像这种情况问题在哪啊?

追答

如果这种情况,说明服务器并没有收到客户端请求;
有几种可能行请一一排查:
1).将无线网卡ip设为内网.排除网络故障成功连接后,转为外网.
2).关闭服务器防火墙.
3).确认客户端绑定的端口和ip与服务器保持一致.
4).确认一点:服务器先accept然后客户端才connect并发送数据.
5).上面一一排查后,最后一个方法:使用异步连接,可以优化调试过程.

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-23
连接外网时涉及到内网和外网的转换,要把外网IP转成内网Ip才行。追问

服务器通过bind()函数绑定的是无限网卡的IP地址,DTU的数据通过无线网卡被服务器接收,像这样的情况,也是需要把外网的IP转换为内网IP吗?还请您不吝赐教!

相似回答