我使用以下线程创建了一个简单的聊天服务器:
#-*- coding:utf-8 -*-
import _thread as thread
import time
import socket
def now():
return time.asctime(time.localtime())
def handleclient(connection, ADDR):
sod = str(ADDR)
msg = sod+"joined the chat"
msg2 = msg.encode("utf-8")
connection.sendall(msg2)
while True:
recieved = connection.recv(1024)
adsf = recieved.decode("utf-8")
print(now(),"(%s):%s" % (ADDR, recieved))
output = "%s:%s"%(ADDR, recieved.decode("utf-8"))
message = output.encode("utf-8")
connection.sendall(message)
if __name__ == "__main__":
addr = ("", 8080)
r =socket.socket()
print("socket object created at", now())
r.bind(addr)
r.listen(5)
while True:
print("Waiting for clients...")
connection, ADDR = r.accept()
print("We have connection from ", ADDR)
thread.start_new_thread(handleclient, (connection, ADDR))
但是,看起来sendall
无法正常工作,并且只向发送邮件的人发送邮件。如何将其发送给所有客户?
答案 0 :(得分:0)
没有什么比你想要做的更好,因为正如赞扬中指出的那样,sendall()
意味着“绝对发送我所有的字节并继续尝试直到你拥有”,而不是“将这些字节发送到批次客户。“
您将需要使用UDP多播(如果您位于支持它的相对可靠的网络上,例如LAN或公司WAN),或者您只需要明确发送到每个连接的客户端。另一种选择是点对点:发送给多个客户端并指示这些客户端发送给更多客户端,直到所有客户端都得到处理。显然这需要更多编码。 :)
答案 1 :(得分:0)
您可以查看Zero MQ,它通过实现多种模式(发布/订阅,推/拉等等)来提供套接字上的高级设施。