#python #server #client #twisted #p2p
#python #сервер #клиент #twisted #p2p
Вопрос:
Я пытаюсь создать отправителя сообщений на основе P2P с помощью twisted, но, к сожалению, я не могу отправить свое сообщение от клиента, чтобы получить подключенные 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 thesen", 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()