【发布时间】:2019-01-21 03:25:42
【问题描述】:
我正在尝试创建一个接受多个客户端的服务器。客户端可以向服务器发送消息,服务器打印这些消息。我下面的代码会产生一个奇怪的结果,其中只有最近的连接才会被服务器接受并打印其消息。
server.py
import socket
import _thread
HOST = "192.168.1.84"
PORT = 5000
def client_thread(conn):
welcome_message = "Connected to server " + HOST + ":" + str(PORT) + "\n"
conn.send(welcome_message.encode("ascii"))
while True:
data = connection.recv(2048)
message = data.decode("ascii")
if not data:
break
print("(" + address[0] + ":" + str(address[1]) + ") " + message)
connection.close()
with socket.socket() as server_socket:
try:
server_socket.bind((HOST, PORT))
server_socket.listen(10)
print("Server hosted on " + HOST + ":" + str(PORT) + "\n")
while True:
connection, address = server_socket.accept()
_thread.start_new_thread(client_thread, (connection,))
print("Connection from " + address[0] + ":" + str(address[1]))
except socket.error as error_message:
print("Error: " + str(error_message))
client.py
import socket
HOST = "192.168.1.84"
PORT = 5000
with socket.socket() as client_socket:
try:
client_socket.connect((HOST, PORT))
data = client_socket.recv(2048)
print(data.decode("ascii"))
while True:
message = input()
data = message.encode("ascii")
client_socket.send(data)
except socket.error as error_message:
print("Error: " + str(error_message))
问题输出行为:
客户端 1 可以连接到服务器并发送消息。服务器很好地接收并打印这些消息。
现在当客户端 2 连接到服务器时,客户端 1 的消息不再发送到服务器。现在只有客户端 2 可以向服务器发送消息并正常打印。
为了进一步执行此操作,客户端 3 连接到服务器。现在客户端 1 和客户端 2 的消息都不会发送到服务器,只有客户端 3 的消息。
【问题讨论】:
标签: python-3.x multithreading sockets