使用 Python3 在不知道 IP 地址的情况下在 2 台本地计算机之间使用 UDP 发送

Send using UDP between 2 local computers without knowing IP addresses using Python3

我正在尝试开发一个应用程序,将 json 字符串从无线网络上的一台计算机发送到另一台计算机(或 phone)。问题是它必须在不知道接收计算机的 IP 地址的情况下工作。

如果我知道要发送到的 IP 地址,则以下代码有效

# UDP Server
import socket

IP = "123.123.123.123" # Not actual IP address
PORT = 66666

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((IP,PORT))

while True:
    data, addr = sock.recvfrom(1024)
    print(f"recieved message: {data} from: {addr}")


# UDP Client
import socket

IP = "123.123.123.123" # Not actual IP address
PORT = 66666

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

MSG = b"Hello there"

sock.sendto(MSG, (IP, PORT))

我也可以使用sock.getsockname()[0]获取当前IP地址并监听,但是发送呢?

我读过一些教程,有人说使用 0.0.0.0 发送或收听所有地址,但是没有收到任何信息。另一个想法是在两端使用 192.0.0.1 来监听并发送到路由器,但后来我得到 'OSError: [WinError 10049] The requested address is not valid in its context'

我考虑过使用广播,但读到这是非常糟糕的做法,以至于从 ipv6 使用它。

我阅读了使用多播的建议,但是有没有办法获取本地网络上计算机的所有 IP 地址以便使用它?

如有任何帮助,我们将不胜感激!

感谢 rdas 的帮助,将我转介给 https://gist.github.com/ninedraft/7c47282f8b53ac015c1e326fffb664b5 我已经设法解决了以下问题;

# UDP Server
import socket

PORT = 66666

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROT_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.bind(("",PORT))

while True:
    data, addr = sock.recvfrom(1024)
    print(f"recieved message: {data} from: {addr}")


# UDP Client
import socket

PORT = 66666

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROT_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

MSG = b"Hello there"

sock.sendto(MSG, ('<broadcast>', PORT))