linux - 广播消息中的绑定(bind)函数

标签 linux sockets udp broadcast

我正在尝试从服务器向许多客户端发送“广播”消息。

谁必须调用绑定(bind)功能服务器或客户端?

最佳答案

简短的回答是:客户端必须发出bind(2)

Python 示例代码:

控制台 1

>>> from socket import *
>>> s = socket(AF_INET, SOCK_DGRAM)
>>> s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
>>> s.bind(("0.0.0.0", 33440))
>>> s.recv(10000)

控制台 2

>>> from socket import *
>>> s = socket(AF_INET, SOCK_DGRAM)
>>> s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
>>> s.bind(("0.0.0.0", 33440))
>>> s.recv(10000)

控制台 3

>>> from socket import *
>>> s = socket(AF_INET, SOCK_DGRAM)
>>> s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
>>> s.sendto("Hello world", ("127.255.255.255", 33440))
11

然后您将在控制台 1 和 2 上看到'Hello world'

更新

在 Console1 和 2 上执行 s.recv(10000) 后,您将得到如下内容:

$ LANG=C netstat -nu4ap | grep python
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
udp        0      0 0.0.0.0:33440           0.0.0.0:*                           31939/python
udp        0      0 0.0.0.0:33440           0.0.0.0:*                           31447/python
$ uname -a
Linux kaidev01 3.2.0-57-generic #87-Ubuntu SMP Tue Nov 12 21:35:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

关于linux - 广播消息中的绑定(bind)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351156/

相关文章:

c++ - UDP 客户端/服务器程序,通过不同 IP 和端口上的 2 个套接字进行通信

c++ - 串口打开返回EAGAIN

java - 如何使用Java程序访问Linux全局变量

linux - Debian apt-show-versions 的 Red Hat 等效项是什么?

c# - 在 socket.connectAsync 中捕获 SocketException

networking - 关于 IP 多播的问题?

linux - Google chrome 与 oracle-xe 的内核参数冲突

java - 最简单的客户端-服务器中的连接重置异常

python - 如何在 python 中创建 IPv6 套接字?为什么得到 socket.error : (22, 'Invalid argument' )?

c++ - 服务器没有收到 UDP 数据包,花了几个小时试图找出问题所在