【问题标题】:Send data between different LANs in python在python中不同局域网之间发送数据
【发布时间】:2020-11-06 14:38:52
【问题描述】:

我已经尝试了两个星期来创建一个 Python 脚本,即使从不同的 LAN 运行它也能与自己通信。

但我无法执行 NAT 穿越。我试着检查出了什么问题,至少套接字不再是timeouting,但我无法接收数据。

我认为问题可能是 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 不是您在脚本中执行的操作,而是在您的网络设置中完成的。
  • 你在脚本中做的不是 NAT 遍历(打孔)吗?这就是我所指的

标签: python sockets p2p nat nat-traversal


【解决方案1】:

NAT 意味着它可以将外部 IP 转换为内部 IP,但是许多 NAT 类型不允许外部 IP 启动连接。所以你的程序可能无法运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多