我正在用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
我希望每个连接都可以保持尽可能长的生命周期,以便随时从客户端接收新数据。我的服务器为什么运行不正常?值得注意的是,当连接似乎已死时,它既不处理新数据也不打印“ CONNECTION DISCONNECTED”信息。为什么会这样?