Python 服务器从所有连接的客户端获取 recv 而不仅仅是从第一个连接的客户端
Python server get recv from all clients conncted and not just from the first one that conncted
标题说明一切。我编写了 Java 代码来为 python 服务器发送消息,但是每次都只发送第一条消息,因为每次 java 再次连接到服务器,并且服务器一直在等待我第一次发送的来自第一个客户的下一条消息。
服务器如何从所有已连接的客户端获取消息?而不仅仅是一个?
我的 python 服务器:
server = socket.socket()
server.bind((socket.gethostname(), 4786))
server.listen(5)
(client, (ipNum, portNum)) = server.accept()
print("Client connected")
while True:
message = str(client.recv(64).decode()) # Check if client send message. I want to change it to check all clients
if(message != ""):
print("Client: " + message)
else:
time.sleep(0.1)
总结
server.accept()
必须在循环内调用。
TLDR
从调用 socket.socket()
返回的套接字 server
是一个 'listening' 套接字。它不用于任何数据传输,而仅用于侦听传入连接。当服务器愿意接受传入连接时,然后调用 server.accept()
。此调用等待客户端连接。当客户端连接时,accept 被唤醒,并且 returns 一个表示与一个客户端的连接的套接字。然后,此套接字用于发送和接收数据,并应在与此特定客户端的通信完成后关闭。
当服务器想要接受来自另一个客户端的连接时,它必须再次调用 server.accept()
以等待来自另一个客户端的连接,并为每个连接的客户端使用唯一的客户端套接字。
如果足以按顺序处理客户端,那么您可以将调用 accept 移到循环中。此外,当与客户端的通信完成后,您应该关闭客户端套接字。
如果可以并联多个客户端,则需要稍微复杂一些的设计。您可以在接受连接后为每个客户端启动一个新线程。该线程可以在循环中调用 recv
并在客户端断开连接时终止。例如,参见 Multi Threaded TCP server in Python。
标题说明一切。我编写了 Java 代码来为 python 服务器发送消息,但是每次都只发送第一条消息,因为每次 java 再次连接到服务器,并且服务器一直在等待我第一次发送的来自第一个客户的下一条消息。
服务器如何从所有已连接的客户端获取消息?而不仅仅是一个?
我的 python 服务器:
server = socket.socket()
server.bind((socket.gethostname(), 4786))
server.listen(5)
(client, (ipNum, portNum)) = server.accept()
print("Client connected")
while True:
message = str(client.recv(64).decode()) # Check if client send message. I want to change it to check all clients
if(message != ""):
print("Client: " + message)
else:
time.sleep(0.1)
总结
server.accept()
必须在循环内调用。
TLDR
从调用 socket.socket()
返回的套接字 server
是一个 'listening' 套接字。它不用于任何数据传输,而仅用于侦听传入连接。当服务器愿意接受传入连接时,然后调用 server.accept()
。此调用等待客户端连接。当客户端连接时,accept 被唤醒,并且 returns 一个表示与一个客户端的连接的套接字。然后,此套接字用于发送和接收数据,并应在与此特定客户端的通信完成后关闭。
当服务器想要接受来自另一个客户端的连接时,它必须再次调用 server.accept()
以等待来自另一个客户端的连接,并为每个连接的客户端使用唯一的客户端套接字。
如果足以按顺序处理客户端,那么您可以将调用 accept 移到循环中。此外,当与客户端的通信完成后,您应该关闭客户端套接字。
如果可以并联多个客户端,则需要稍微复杂一些的设计。您可以在接受连接后为每个客户端启动一个新线程。该线程可以在循环中调用 recv
并在客户端断开连接时终止。例如,参见 Multi Threaded TCP server in Python。