我编写了以下函数,用于我用于测试的一组套接字实用程序中。(如果这很重要,请使用 Python 2.7.3。)我将库拉入其中的主要原因select是我可以实现超时,而不是永远等待响应。我发现的问题是响应在 2048 个字符处被截断,尽管使用 64K 作为.recv()套接字上方法的最大大小。在我参与之前,这种截断并没有发生select。当我将最大尺寸设置得更高时,它很高兴地通过了 64K 甚至更多。
我浏览了一些在线资源,select并找到了有关接收数据大小的明显上限的任何信息。即没有它存在的信息,更不用说如何修改它了。谁能指出我克服这个 2K 限制的方法?
导入套接字,选择
最大尺寸 = 65535
超时 = 10
def 瞬态连接(主机、端口、发送数据):
错误,响应=假,''
尝试:
sendSocket = socket.socket()
sendSocket.connect((主机,端口))
sendSocket.send(sendData)
gotData = select.select([sendSocket],[],[],TIMEOUT)
如果(得到数据 [0]):
响应 = sendSocket.recv(MAXSIZE)
别的:
错误=真
response = '*** TIMEOUT ***\n主机没有响应。'
sendSocket.close()
除了异常,errText:
错误,响应 = True,'*** SOCKET 错误 ***\n'+str(errText)
返回(错误,响应)