游离、 2019-03-29 23:54 采纳率: 0%
浏览 1654

socket连接运行一段时间后无法正常通信.

小弟目前在负责一个socket相关的小项目,具体流程很简单,服务端向客户端发送数据,客户端接收到数据后进入睡眠,然后由第三方工具唤醒客户端,唤醒后服务端继续想客户端发送数据,客户端继续进入睡眠,如此一直循环.
目前小弟碰到的问题是:当循环运行到一定圈数后(有时几百圈,有时一千多圈),服务端send()方法运行过后,客户端却接收不到数据,一直阻塞在receive()方法这. 此时我用netstat -nao查看tcp连接,状态是established
还有就是服务端代码是有python写的,客户端代码是c#,我在客户端设置了socket.ReceiveTimeout(120000),当receive两分钟未收到数据,就会报异常,在catch语句里面关闭连接并重新连接;方法如下

socket.shutdown(SocketShutdown.Both);
socket.close();
socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(ip,8002);
socket.Connect(endPoint);

但是重新连接后依然无法接收数据,只能一直等待两分钟报错后重连,然后继续报错.但是如果我在运行正常的情况下断开WiFi然后重连,程序是可以继续运行的..

这个问题已经困扰小弟一两个月了,希望有大佬能够帮小弟分析一下原因,万分感谢!!!

宁外,今天小弟发现服务端python代码在创建socket的时候用的是

s = socket.socket()

而不是

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

即未指定ipv4协议和流,不知道是不是因为这个的原因(还未验证)

  • 写回答

1条回答 默认 最新

  • lizi030 2020-11-19 07:19
    关注

    s = socket.socket() 没有问题,默认参数就是socket.AF_INET, socket.SOCK_STREAM,可能是服务器端程序的问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题