问题描述
我已经尝试了两个星期来创建一个Python脚本,即使从不同的LAN运行,该脚本也可以与自己通信。
但是我无法执行NAT遍历。我试图检查出什么问题了,至少套接字不再timeout
了,但是我无法接收数据。
我认为问题可能在于NAT正在将发送和接收映射到其他端口,但是如果确实是问题,则不知道如何检查或修复它。
代码:
import socket
import time
from threading import Thread
PORT = 4206
peers = [''] # public ip adresses
sock = socket.socket(socket.AF_INET,socket.soCK_DGRAM)
LOCAL_HOST = ('127.0.0.1',PORT)
def main():
print('P2P are set to PORT :',PORT)
Thread(target=nat_traversal).start()
def recv():
time.sleep(5)
while True:
print('response:',sock.recvfrom(4096))
def sec30():
for i in range(0,29):
time.sleep(1)
print(i,end=',')
time.sleep(1)
print('30')
def nat_traversal():
Thread(target=recv).start()
while True:
t = Thread(target=sec30,args=())
t.start()
for peer in peers:
if peer != '':
try:
sock.sendto(b'hey',(peer,PORT))
except TimeoutError:
print('timeout')
t.join()
if name == 'main':
main()
您能给我一个执行nat遍历并可以发送和接收消息的Python脚本的示例吗?
预先感谢(:
解决方法
NAT意味着它可以将外部的IP转换为内部的IP,但是许多NAT类型不会从外部允许IP启动连接。因此您的程序可能无法正常工作。