如何使TCP连接尽可能长时间地保持活动状态以接收数据



我正在用python编写一个多处理服务器来接收来自多个客户端的数据。当建立新连接时,数据传输一开始是可以的。创建一个新进程来接收和处理数据流。如果客户端主动断开服务器连接,则套接字将关闭并终止进程。


到目前为止,一切都很好。但是,当数据传输暂停一段时间时,recv()函数似乎关闭,无法再接收新数据。但是,基于recv()的返回值,连接似乎很好。尽管该进程仍然存在,但客户端必须重新连接服务器,这使得服务器为其创建一个新进程。

这是我服务器的主要代码:

def main():
with socket(AF_INET, SOCK_STREAM) as s:
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
address = ('', 7788)
s.bind(address)
s.listen()
while True:
print('WAITING FOR CONNECTIONS...')
newConn, newAddr = s.accept()
with newConn:
print('%s CLIENT ACCEPTED...' % newAddr[0])
p = Process(target=recv, args=(newConn, newAddr))
p.start()
def recv(newConn, newAddr):
while True:
recvData = newConn.recv(1024)
if len(recvData) > 0:
dataprocessing(recvData)
else:
print('%s CLIENT DISCONNECTED' % newAddr[0])
break

我希望每个连接都能尽可能长时间地保持活动状态,以便随时从客户端接收新数据。为什么我的服务器不能正常工作?值得注意的是,当连接似乎死了时,它既没有新数据来处理,也没有打印出"连接断开"信息。为什么?

尝试设置超时以及更好的异常处理和重新连接机制。您还应该参考设置块。

相关内容

最新更新