我正在尝试使用多个客户端的套接字为聊天服务器编写代码。但它只适用于一个客户。为什么它不适用于多个客户?
我必须使用Beaglebone Black执行此程序。我的服务器程序将在gag或终端上的beaglebone和普通客户端上运行。所以我不能使用多线程。
#SERVER
import socket
import sys
s=socket.socket()
s.bind(("127.0.0.1",9998))
s.listen(10)
while True:
sc,address = s.accept()
print address
while True:
msg = sc.recv(1024)
if not msg:break
print "Client says:",msg
reply = raw_input("enter the msg::")
sc.send(reply)
sc.close()
s.close()
#CLIENT
import socket
import sys
s= socket.socket()
s.connect(("127.0.0.1",9998))
while (1):
msg = raw_input("enter the msg")
s.send(msg)
reply = s.recv(1024)
print "Server says::",reply
s.close()
答案 0 :(得分:2)
使用事件循环。
像asyncio一样集成在python中:Echo server example
或使用提供事件循环的外部库,如libuv:Echo server example。
注意:您的代码不适用于多个客户同时,因为您在接收操作中被阻止,而您没有处理新的接受操作。