簡體   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