Python UDP打孔不适用于P2P网络
我又回来了,遇到了另一个UDP打孔问题,我似乎已经明白了这个概念,但我似乎仍然无法应用它。显然,要在NAT上打个洞,必须先发送欢迎消息(或任何消息),然后再发送实际数据。我正在这样做,但当需要进行节点间通信时,它似乎不起作用 这段代码是我正在开发的P2P聊天系统的一部分Python UDP打孔不适用于P2P网络,python,json,sockets,udp,p2p,Python,Json,Sockets,Udp,P2p,我又回来了,遇到了另一个UDP打孔问题,我似乎已经明白了这个概念,但我似乎仍然无法应用它。显然,要在NAT上打个洞,必须先发送欢迎消息(或任何消息),然后再发送实际数据。我正在这样做,但当需要进行节点间通信时,它似乎不起作用 这段代码是我正在开发的P2P聊天系统的一部分 import socket import threading import json nodes = {} class Marboo: def __init__(self): self.sock =
import socket
import threading
import json
nodes = {}
class Marboo:
def __init__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.bi = ""
self.bp = 5002
self.cmds = {
"checkin":self.checkin,
"msg":self.msg,
}
self.nick = "test"
self.room = "a"
def main(self):
self.get_nodes()
while True:
data, addr = self.sock.recvfrom(102400)
data = json.loads(data)
print data
def prompt(self):
while True:
msg = raw_input(self.nick+"> ")
data = json.dumps({"cmd":"msg", "message":msg, "room":self.room, "nick":self.nick})
self.send(data)
def get_nodes(self):
self.sock.sendto("", (self.bi, self.bp))
data = self.sock.recv(1024)
nodes = json.loads(data)
for x in nodes:
self.connect(tuple(nodes[x]))
self.sock.sendto(json.dumps({"cmd":"checkin"}), tuple(nodes[x]))
def send(self, msg):
for x in nodes:
self.connect(tuple(nodes[x]))
self.sock.sendto(msg, tuple(nodes[x]))
def connect(self, addr):
self.sock.sendto(json.dumps({"cmd":"connect"}), addr)
def checkin(self):
pass
def msg(self):
pass
if __name__ == "__main__":
threading.Thread(target=Marboo().prompt).start()
Marboo().main()
你是怎么运作的?什么是网络设置?问题是什么?为什么问题是为什么这不起作用!我已经在几种不同的系统上运行了它,有几种不同的方式。它在本地工作,仅当我尝试远程接收数据时,例如从我的服务器接收数据。我的问题是,我无法通过防火墙接收数据,因为我在尝试应用此概念时犯了错误。