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

标签 python sockets p2p nat nat-traversal

我已经尝试了两个星期来创建一个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启动连接。因此,您的程序可能无法正常工作。

关于python - 在python中的不同LAN之间发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64716615/

相关文章:

c# - 编程P2P应用程序

android - WebRTC 的本地实时通信替代方案

python - 文件较大时 CSV 文件出现问题

python - CMD中的`python`返回"` python ` is not recognized ..."

python - 方程对同一个变量返回不同的值

Python 套接字实现

python - 从 Python 调用 Perl 脚本

c - 在原始套接字上获取以太网帧长度(非阻塞)

python - 尝试连接套接字时出现错误 10051

c++ - 重定向打开的 TCP 连接