首页 > 解决方案 > Python Twisted/Reactor 无法将消息发送到服务器/客户端

问题描述

我正在尝试创建一个基于 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()

标签: pythonserverclienttwistedp2p

解决方案


推荐阅读