gpt4 book ai didi

Python 套接字被绞死 - 有时(客户端与闪存连接) - python 3.2

转载 作者:行者123 更新时间:2023-11-28 19:27:28 24 4
gpt4 key购买 nike

我在 Python (3.2) 中遇到套接字的奇怪行为。客户端使用 Flash 连接到我的应用程序。大多数时候没有什么异常,但有时 python 会以不应该发生的方式崩溃——进入无限循环。下面我附上日志中的循环代码和错误信息。 Python 卡在 bytesRecived = sock.recv(64) 上并接收 b'' 女巫在日志中可见。

代码:

try:
buff = ''
allBytesRecived = []
timeout = sock.gettimeout()
sock.settimeout(10.0)
tries = 0
while len(buff) < 64 and tries < 64:
tries += 1
bytesRecived = sock.recv(64)
allBytesRecived.append(bytesRecived)
comm = str(bytesRecived, config.encoding)
buff += comm

#flash connection and his strage security policy
if buff[:24] == config.flash.policy_request:
cross = open(config.flash.crossdomain,'rb').read()
cross+=b'\x00' #end string
sock.send(cross);
raise FlashCrossdomainException()

if len(buff) < 64:
logger.critical('Hanged! buff=%s bytes=%s timeout=%s' % (repr(buff), repr(allBytesRecived), repr(sock.gettimeout())))
raise InvalidSessionException('Unknown error')
sock.settimeout(timeout)

except FlashCrossdomainException as e:
raise e
except socket.timeout:
raise InvalidSessionException('Timeout on signing in to system')
except socket.error as e:
logger.exception(e)
raise InvalidSessionException('Unknown IO error')
except Exception as e:
logger.exception(e)
raise InvalidSessionException('Unknown error')

记录错误:

CRITICAL: Hanged! buff='' bytes=[b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b''] timeout=10.0

最佳答案

python 的 socket 模块与 BSD 套接字 API 非常匹配。

当套接字的远程端(此处为您的 Flash 客户端)关闭时,本地端(此处为您的 Python 服务器)的 recv() 调用将返回空字符串('')。无需继续处理,因为客户端不会再发送任何内容: channel 已关闭。

另一方面,由于您的套接字是非阻塞的,如果由于客户端在指定的时间限制(10 秒)内未发送任何数据而发生套接字超时,则 recv() 调用将引发 socket.timeout 异常,您可以捕获并进行相应处理。

您应该在 recv() 调用之后添加一个测试:

bytesRecived = sock.recv(64)
if not len(bytesRecived):
raise InvalidSessionException('connection reset')

关于Python 套接字被绞死 - 有时(客户端与闪存连接) - python 3.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6692618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com