[英]How to send list from server to client in twisted python?
我在用python编写多客户端聊天服务器程序。 在我的程序中,如果我们从一个客户端发送“列表”,则服务器必须将连接的客户端列表发送到该客户端。 同样,当我们从一个客户端发送“交谈客户端名称消息”时,服务器必须将该消息发送到“客户端名称”中指定的目标客户端。 但是我的代码无法正常工作。 服务器中有错误。 不显示列表,通话也不起作用。
我的服务器代码如下:
class MultiEcho(Protocol):
def __init__(self, factory):
self.factory = factory
def connectionMade(self):
self.factory.clients.append(self)
def dataReceived(self,data):
data = data.strip()
if (data == "list"):
for client in self.factory.clients:
print self.factory.clients
self.transport.write(self.factory.clients)
else:
data = data.split()
if (len(data) > 1):
l = data[1]
m = data[2]
l.transport.write(m)
def connectionLost(self,reason):
self.factory.clients.remove(self)
class MultiEchoFactory(Factory):
def __init__(self):
self.clients = []
def buildProtocol(self, addr):
return MultiEcho(self)
if __name__ == '__main__':
import sys
if len(sys.argv) != 4:
print "Sorry.. not correct.. Try Again!"
sys.exit(1)
else:
if (sys.argv[1] == "chatserver") and (sys.argv[2] == "-p"):
PORT = sys.argv[3]
reactor.listenTCP(8000, MultiEchoFactory())
reactor.run()
有人可以给我解决办法吗
dataReceived()
接收多少数据。 您可能需要从LineReceiver
子类,并使用lineReceived()
处理输入。 transport.write()
接受字符串,而不是列表。 您需要定义clientname
的客户例如,工厂应该能够找到它的名字的客户机。 然后,您可以在LineReceived()
:
command, _, rest = line.partition(command_separator)
if command == "talk":
clientname, _, message = rest.partition(arg_separator)
self.factory.getClient(clientname).sendLine(message)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.