![](/img/trans.png)
[英]python unable to get ip address using socket connection with broadcast
[英]How to get broadcast address with python socket in localhost?
我尝试在 localhost 中将消息发送到广播地址,但它不起作用。 当我使用socket.INADDR_BROADCAST
时,我得到[Errno 11001] getaddrinfo failed
。
import socket
client_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_server.bind(("127.0.0.1", 12345))
client_server.connect((f"{socket.INADDR_BROADCAST}", 12345))
client_server.sendto("New user is connected".encode("utf-8"), (f"{socket.INADDR_BROADCAST}", 12345))
您正在创建一个 TCP ( SOCK_STREAM
) 套接字。 TCP 没有广播的概念。 TCP 客户端套接字无法connect()
到广播 IP,而 TCP 服务器套接字无法在广播 IP 上listen()
。 这样做是没有意义的。 在 TCP 中广播消息的唯一方法是让服务器跟踪连接到它的每个客户端,然后一次将消息发送给每个客户端。
另一方面,UDP ( SOCK_DGRAM
) 套接字可以sendto()
向广播 IP 发送消息(如果您事先启用套接字的SO_BROADCAST
选项),并且它可以recvfrom()
发送到属于广播 IP 的消息套接字绑定的适配器。
请注意,将广播 UDP 套接字绑定到127.0.0.1
的bind()
意味着只有绑定到127.0.0.1
的 UDP 接收器才能接收广播。 您将无法通过网络进行广播。
import socket
client_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#client_server.bind(("127.0.0.1", 12345))
client_server.setsockopt(client_server.SOL_SOCKET, client_server.SO_BROADCAST, 1)
client_server.sendto("New user is connected".encode("utf-8"), (f"{socket.INADDR_BROADCAST}", 12345))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.