【发布时间】:2016-08-16 01:10:44
【问题描述】:
我正在尝试使用线程制作一个服务器-客户端程序来处理每个客户端,但服务器一次只能接受一个客户端。如果第一个客户端断开连接,则接受第二个客户端。而且,每个客户端只能发送一次数据,然后程序就发送失败了。
在发布之前,我查看了许多其他 Stack Overflow 帖子,包括以下内容:
how can I make a server communicate with more than 1 client at the same time?
My Python socket server can only receive one message from the client
但是通过查看这些帖子我没有找到解决方案。
这是服务器代码:
import socket
from threading import *
def main():
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('172.20.3.62', 5000))
s.listen(1)
clients = []
print("listening")
def clienthandler(c):
clients.append(c)
try:
while True:
data = c.recv(1024).decode("UTF-8")
if not data:
break
else:
print(data)
for client in clients:
client.send(data.encode("UTF-8"))
except:
clients.remove(c)
c.close()
while True:
c, addr = s.accept()
print("accepted a client")
Thread(target=clienthandler(c)).start()
if __name__ == '__main__':
main()
这是客户端代码:
import socket
from threading import *
def main():
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('172.20.3.62', 5000))
print("connected")
def send():
msg = input("ENTER:")
s.send(msg.encode("UTF-8"))
def receive():
while True:
data = s.recv(1024).decode("UTF-8")
if data:
print(data)
else:
break
Thread(target=send).start()
Thread(target=receive).start()
if __name__ == '__main__':
main()
【问题讨论】:
-
Thread(target=clienthandler(c))->Thread(target=clienthandler, args=(c,)) -
@Rawing 非常感谢!你完美解决了!另外,我解决了客户端只发送一次,忘了把它放在一个循环中。
标签: python multithreading sockets