python - 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()
解决方案
推荐阅读
- java - 验证Java bean验证中是否为整数、长整数和双精度值的字段
- vba - 关于数据排序的 VBA 编码
- java - 在控制台和计算器输出文件上打印程序输出
- angular - 如何将 NG2 图表的某些选项绑定到某些控件
- javascript - 当 axios 请求 Http 请求,但 url 改变并创建 [object%20Object]
- three.js - 三.js每张脸不同的纹理材质
- windows - 快速 Powershell Filewatcher
- security - 提示用户只输入部分密码
- php - 如何向管理员和客户发送暂停的 WooCommerce 电子邮件通知
- nuxt.js - Nuxt3:如何使用tailwindcss