繁体   English   中英

如何在本地主机中使用 python 套接字获取广播地址?

[英]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.1bind()意味着只有绑定到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM