python 多线程 广播的发送与监听
时间: 2023-06-30 12:18:40 浏览: 123
在 Python 中,可以使用多线程实现广播的发送和监听。发送广播消息可以在一个线程中完成,而接收广播消息可以在另一个线程中完成。下面是一个简单的 Python 代码示例,展示了如何使用多线程实现广播的发送和监听:
```python
import socket
import threading
# 广播地址和端口号
broadcast_address = ('255.255.255.255', 8888)
# 创建 Socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置 Socket 选项,允许广播
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 发送广播消息的函数
def send_broadcast_message():
while True:
message = input("Input message to broadcast: ")
s.sendto(message.encode(), broadcast_address)
# 接收广播消息的函数
def receive_broadcast_message():
# 创建 Socket 对象
r = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定 IP 地址和端口号
r.bind(('0.0.0.0', 8888))
# 设置 Socket 选项,允许广播
r.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 接收广播消息
while True:
data, addr = r.recvfrom(1024)
print("Received from {}: {}".format(addr, data.decode()))
# 创建发送广播消息的线程
send_thread = threading.Thread(target=send_broadcast_message)
# 创建接收广播消息的线程
receive_thread = threading.Thread(target=receive_broadcast_message)
# 启动线程
send_thread.start()
receive_thread.start()
# 等待线程结束
send_thread.join()
receive_thread.join()
# 关闭 Socket
s.close()
```
在这个示例中,我们创建了两个函数:`send_broadcast_message` 和 `receive_broadcast_message`,分别用于发送和接收广播消息。我们使用 `threading.Thread` 方法创建了两个线程,分别执行这两个函数。在主线程中,我们等待这两个线程结束,然后关闭 Socket。注意,在发送广播消息的线程中,我们使用 `input` 方法从控制台读取用户输入,然后将其发送到广播地址。在接收广播消息的线程中,我们创建了另一个 Socket 对象,用于接收广播消息。每次接收到广播消息后,我们输出到控制台。
需要注意的是,在多线程中使用 Socket 时,要确保每个线程使用的 Socket 对象是不同的。因此,在接收广播消息的线程中,我们创建了另一个 Socket 对象。