我正在尝试使用twisted创建一个基于P2P的消息发送器,但不幸的是,我无法从客户端发送消息以获得连接的IP。例如,调用startProtocol()函数,但中的数据不会传输到服务器。知道我做错了什么吗?提前谢谢
服务器
from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
from random import randint
class Server(DatagramProtocol):
def __init__(self):
self.clients = set()
print("Server initialized")
def datagramRecieved(self, datagram, addr):
datagram = datagram.decode("utf-8")
print("Datagram recieved"+datagram)
if datagram == "ready":
adresses = "\n".join([str(x) for x in self.clients])
self.transport.write(adresses.encode('utf-8'), addr)
self.clients.add(addr)
if __name__ == '__main__':
reactor.listenUDP(9999, Server())
reactor.run()
客户
from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
from random import randint
class Client(DatagramProtocol):
def __init__(self, host, port):
if host == "localhost":
host = "127.0.0.1"
self.id = host, port
self.address = None
self.server = '127.0.0.1', 9999
print("Working on id:", self.id)
def startProtocol(self):
print("Called startProtocol")
self.transport.write("ready".encode("utf-8"), self.server)
def datagramRecieved(self, datagaram, addr):
datagaram = datagaram.decode('utf-8')
if addr == self.server:
print("Choose a client from these\n", datagaram)
addresses = datagaram.split('\n')
self.address = input("write host:"), int(input("write port"))
reactor.callInThread(self.send_message)
else:
print(addr, ":", datagaram)
def send_message(self):
while True:
self.transport.write(
input("Uzeneted:").encode('utf-8'), self.address)
if __name__ == '__main__':
port = randint(1000, 5000)
reactor.listenUDP(port, Client('localhost', port))
reactor.run()
目前没有回答
相关问题 更多 >
编程相关推荐