为什么socket长时间运行就会出错,求大牛指点
我做了一个客户端与一个服务端程序,一个send,一个recv,recv正常处理后给一个反馈,然后服务端继续send,正常运行没问题,可是若是过了一天空闲,比如星期日不进行生产则没有需要发送的订单,也就不需要send和recv,recv阻塞一天,等待服务端发送数据,但是问题来了,等到星期一的时候服务端又需要向客户端发送数据了,可是这个时候就发送不过去,就会错误,返回socket 10054的错误,这是为什么了,我两台用的都是Windows XP系统,用的是DHCP方式的路由器。太奇怪了,平时发送没问题,时间久了再发送就会出错,这也太不可思议了吧,有哪位大牛有过这方面的网络编程经验吗,这实在是太奇怪了!好像这个版区的人比较多,所以就发到这里来了,真心求指点。
[解决办法]
socket不是一个常连接协议,操作系统在一个创建的socket长时间不用就会自动关闭这个socket,楼主你可以在客户端设定一个心跳包,当自己recv出错的时候关闭socket重新建立一个socket,出错则在试图建立一个socket,这是一个循环。
更多关于这方面的资料可以搜索一个远控木马的源码gh0st
并且奉劝楼主一句,并不是所有的功能都一定需要常连接。楼主可以重新设计这个通信协议,比如使用中转。这样可能更好!
[解决办法]
心跳包
[解决办法]
赵老师的意思不错的,他是让你保持连线,发送一个空的icmp或者直接是http包,保持连线,让操作系统不至于关闭你的空闲接口,我也尝试过,但是效果不理想,可能是我程序本身问题,心跳包可以参看源码gh0st
[解决办法]
看你的需求,没必要做成长连接。
像你这种,请求应答机制的,用短连接。
c连接s,c请求s,s应答c... 完毕 断开连接