我在具有多个网络接口的主机之间使用多播UDP.我正在使用boost :: asio,并且被接收器必须进行的2个操作混淆:bind,然后是join-group.
当您对加入的每个组播组执行此操作时,为什么需要在绑定期间指定接口的本地地址?
姐妹问题是关于多播端口:因为在发送期间,您发送到多播地址和端口,为什么在订阅多播组期间,您只需指定地址,而不是端口 - 在混乱的呼叫中指定的端口绑定.
注意:"join-group"是一个包装器setsockopt(IP_ADD_MEMBERSHIP)
,如文档所示,可以在同一个套接字上多次调用以订阅不同的组(通过不同的网络?).因此,每次订阅组时,抛弃绑定调用并指定端口是完全合理的.
从我所看到的,总是绑定到"0.0.0.0"并在加入组时指定接口地址,效果非常好.困惑.
我正在尝试创建一个程序,它将在本地计算机上打开一个端口,让其他人通过netcat连接到它.我目前的代码是.
s = socket.socket()
host = '127.0.0.1'
port = 12345
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print('Got connection from', addr)
c.send('Thank you for connecting')
c.close()
Run Code Online (Sandbox Code Playgroud)
我是Python和套接字的新手.但是当我运行此代码时,它将允许我使用命令发送netcat连接:
nc 127.0.0.1 12345
Run Code Online (Sandbox Code Playgroud)
但是在我的Python脚本上,我得到了c.send的错误:
TypeError: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)
我基本上只是试图打开一个端口,允许netcat连接并在该机器上有一个完整的shell.
有很多使用特定网络接口(NIC,例如eth0、127.0.0.1等)来接收多播消息的示例。但是,关于如何将多播(UDP)消息发送到特定接口的讨论/示例很少,例如默认情况下是本地循环(127.0.0.1)而不是eth0。
背景:RedHat Linux,Python,224.1.1.1 5005
Python 组播中的Python代码示例
关于IPv6的类似讨论 如何在Linux中通过特定接口发送多播数据包
Windows的类似讨论 如何向第一个NIC组播(发送)?
提前致谢。
我想构建一个可以在从另一个脚本运行时控制的脚本.例如,我想像这样运行我的脚本:
~: Server &
Run Code Online (Sandbox Code Playgroud)
并能够运行其中一个功能,如:
~: client func1
Run Code Online (Sandbox Code Playgroud)
在我搜索时,我发现信号模块有我想要的东西,但它的信号是预先定义的,我无法发送自己的信号.
我即使使用网络框架进行客户端/服务器实现,但我认为这对于我希望我的脚本具有的能力来说太过分了.
谢谢你们.
python ×3
multicast ×2
bind ×1
boost-asio ×1
ipv4 ×1
linux ×1
python-3.x ×1
sockets ×1
udp ×1
unix ×1