网站定制套餐,网站建设概括,人像摄影网站十大排名,公众号里的电影网站怎么做的问题现象#xff1a;下位机做TCP服务器#xff0c;上位机来连接下位机的TCP服务#xff0c;中间会有主动断开#xff08;上位机主动关闭socket#xff09;和异常断开#xff08;网线断开#xff09;的情况#xff0c;出现异常的时候#xff0c;上位机连接下位机的TCP …问题现象下位机做TCP服务器上位机来连接下位机的TCP服务中间会有主动断开上位机主动关闭socket和异常断开网线断开的情况出现异常的时候上位机连接下位机的TCP socket号会变成0下位机正常发数据但是上位机那边收不到信息因为windwos系统将socket为0视为错误socket不能正常通信。 问题分析不用纠结windows为啥不能使用socket为0通信了linux可以使用socket为0通信
应该分析为啥socket会出现0的异常情况。 产生原因1.在Linux中socket 0和1通常用于标准输入输出重定向。 Socket 0和1分别代表标准输入stdin和标准输出stdout它们用于重定向标准输入输出流。linux系统默认会打开0和1的socket。
2.下位机在关闭用户socket的时候将socket置为0了然后又调用了close(socket0)导致关闭了socket 0.
3.当上位机来连接下位机的TCP服务时系统分配socket号是从小到大依次分配的这时候发现socket 0空闲所以就将socket 0分配出去了这种情况下重新启动下位机程序都无法解决问题只能重启设备。 解决办法1.close socket以后将socket置为-1这个非正常值千万不能置为0. 2.当再次调用关闭socket函数的时候先判断socket0再进行close操作。 总结tcp使用不当关闭了系统使用的socket 0再次创建socket的时候系统分配了socket 0引发的问题。初始化和清空变量的时候要考虑变量的有效值。