C# Socket通信问题:我写的服务器程序与本机的服务器程序可以通信,但与不同局域网的的服务端无法通信
当我把服务器的IP地址设定为“127.0.0.1”(本机)时,在我自己的电脑上有一个客户端程序,他们之间能够连接、并收发数据;但我的服务器程序若要连接一个非局域网的客户端...
当我把服务器的IP地址设定为“127.0.0.1”(本机)时,在我自己的电脑上有一个客户端程序,他们之间能够连接、并收发数据;但我的服务器程序若要连接一个非局域网的客户端,服务器运行到accept函数时就不再往下继续执行,很明显是没有建立连接,为什么会这样?我该怎么办?
展开
2个回答
展开全部
肯定不会继续运行的,你应该理解socket机制.
当你的服务器端在listen后会主动accept客户端消息,他是处于阻塞状态的.
这时候,你再启动客户端进行connect到服务器端,服务器收答唯到运举燃客户端连接旁虚请求才会继续执行下去.
通过recive/send方式发送数据.
当你的服务器端在listen后会主动accept客户端消息,他是处于阻塞状态的.
这时候,你再启动客户端进行connect到服务器端,服务器收答唯到运举燃客户端连接旁虚请求才会继续执行下去.
通过recive/send方式发送数据.
追问
您说的这点我知道,我的服务器通过bind()函数绑定的是无限网卡的IP地址,要跟服务器连接的是一个DTU(data transfer unit),DTU一直是接通的,它会不断的发送连接请求,DTU的连接请求通过无线网被无线网卡接收,按理说,服务器是可以接收到它的连接请求的,但实际调试时发现在accept这个地方终止。您看看像这种情况问题在哪啊?
追答
如果这种情况,说明服务器并没有收到客户端请求;
有几种可能行请一一排查:
1).将无线网卡ip设为内网.排除网络故障成功连接后,转为外网.
2).关闭服务器防火墙.
3).确认客户端绑定的端口和ip与服务器保持一致.
4).确认一点:服务器先accept然后客户端才connect并发送数据.
5).上面一一排查后,最后一个方法:使用异步连接,可以优化调试过程.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |