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

当我把服务器的IP地址设定为“127.0.0.1”(本机)时,在我自己的电脑上有一个客户端程序,他们之间能够连接、并收发数据;但我的服务器程序若要连接一个非局域网的客户端... 当我把服务器的IP地址设定为“127.0.0.1”(本机)时,在我自己的电脑上有一个客户端程序,他们之间能够连接、并收发数据;但我的服务器程序若要连接一个非局域网的客户端,服务器运行到accept函数时就不再往下继续执行,很明显是没有建立连接,为什么会这样?我该怎么办? 展开
 我来答
mi_new
2013-07-24 · TA获得超过6328个赞
知道小有建树答主
回答量:547
采纳率:0%
帮助的人:290万
展开全部
肯定不会继续运行的,你应该理解socket机制.
当你的服务器端在listen后会主动accept客户端消息,他是处于阻塞状态的.
这时候,你再启动客户端进行connect到服务器端,服务器收到客户端连接请求才会继续执行下去.
通过recive/send方式发送数据.
追问
您说的这点我知道,我的服务器通过bind()函数绑定的是无限网卡的IP地址,要跟服务器连接的是一个DTU(data transfer unit),DTU一直是接通的,它会不断的发送连接请求,DTU的连接请求通过无线网被无线网卡接收,按理说,服务器是可以接收到它的连接请求的,但实际调试时发现在accept这个地方终止。您看看像这种情况问题在哪啊?
追答
如果这种情况,说明服务器并没有收到客户端请求;
有几种可能行请一一排查:
1).将无线网卡ip设为内网.排除网络故障成功连接后,转为外网.
2).关闭服务器防火墙.
3).确认客户端绑定的端口和ip与服务器保持一致.
4).确认一点:服务器先accept然后客户端才connect并发送数据.
5).上面一一排查后,最后一个方法:使用异步连接,可以优化调试过程.
百度网友af2093e73
2013-07-23
知道答主
回答量:2
采纳率:0%
帮助的人:2316
展开全部
连接外网时涉及到内网和外网的转换,要把外网IP转成内网Ip才行。
追问
服务器通过bind()函数绑定的是无限网卡的IP地址,DTU的数据通过无线网卡被服务器接收,像这样的情况,也是需要把外网的IP转换为内网IP吗?还请您不吝赐教!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式