我正在尝试开发一个应用程序,以将json字符串从无线网络上的一台计算机发送到另一台(或电话)。问题在于它必须在不知道接收计算机的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]请求的地址在其上下文中无效”
我考虑过使用广播,但已经读到从ipv6开始使用,这是非常糟糕的做法。
我阅读了有关使用多播的建议,但是是否有一种方法可以获取本地网络上计算机的所有IP地址以进行使用?
任何帮助将不胜感激!
答案 0 :(得分:0)
感谢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))