[英]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.