Python中socket里的.recv()函数问题
现在想往指定IP的指定端口发送一组测试数据,要求接收每一条测试数据的返回值,1s内没有接收到返回的话算作超时,继续发送下一条。现在的问题是一旦有超时的,再发送下一条时程序...
现在想往指定IP的指定端口发送一组测试数据,要求接收每一条测试数据的返回值,1s内没有接收到返回的话算作超时,继续发送下一条。现在的问题是一旦有超时的,再发送下一条时程序就报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。不太了解socket方面的知识,哪位朋友帮忙说说怎么回事
展开
1个回答
展开全部
可以通过setsockopt,或者更简单的setblocking,
settimeout设置。阻塞式的socket的recv服从这样的规则:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,阻塞直到缓冲区中有数据。非阻塞式的socket的recv服从的规则则是:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,产生EAGAIN的错误并返回(在Python中会抛出一个异常)。两种情况都不会返回空字符串,返回空数据的结果是对方关闭了连接之后才会出现的。
settimeout设置。阻塞式的socket的recv服从这样的规则:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,阻塞直到缓冲区中有数据。非阻塞式的socket的recv服从的规则则是:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,产生EAGAIN的错误并返回(在Python中会抛出一个异常)。两种情况都不会返回空字符串,返回空数据的结果是对方关闭了连接之后才会出现的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询