在python中的不同LAN之间发送数据

在python中的不同LAN之间发送数据,python,sockets,p2p,nat,nat-traversal,Python,Sockets,P2p,Nat,Nat Traversal,两周来,我一直在尝试创建一个Python脚本,即使在不同的局域网上运行,它也能与自身通信 但是我不能执行NAT遍历。我已经试着检查出了什么问题,至少套接字不再timeouting,但我无法接收数据 我认为问题可能是NAT正在将发送和接收映射到不同的端口,但不知道如何检查或修复它(如果这确实是问题) 代码: 你能给我一个Python脚本的例子吗,它执行nat遍历并可以发送和接收消息 提前谢谢(:NAT意味着它可以将外部IP转换为内部IP,但许多NAT类型不允许从外部IP启动连接。因此,您的程序可能

两周来,我一直在尝试创建一个Python脚本,即使在不同的局域网上运行,它也能与自身通信

但是我不能执行NAT遍历。我已经试着检查出了什么问题,至少套接字不再
timeout
ing,但我无法接收数据

我认为问题可能是NAT正在将发送和接收映射到不同的端口,但不知道如何检查或修复它(如果这确实是问题)

代码:

你能给我一个Python脚本的例子吗,它执行nat遍历并可以发送和接收消息


提前谢谢(:

NAT意味着它可以将外部IP转换为内部IP,但许多NAT类型不允许从外部IP启动连接。因此,您的程序可能无法工作。

NAT意味着它可以将外部IP转换为内部IP,但许多NAT类型不允许从外部IP启动连接。因此,您的程序可能无法工作。

>NAT不是你在脚本中做的事情,它是在你的网络设置中完成的。NAT穿越(打孔)不是你在脚本中做的事情吗?这就是我所指的toNAT不是你在脚本中做的事情,它是在你的网络设置中完成的。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()