python 同时启动多个socket监听不同的端口,并处理相应的消息,相互之间数据不干扰
时间: 2024-02-19 09:59:14 浏览: 84
同时打开多端口的通信程序
4星 · 用户满意度95%
在 Python 中,同时启动多个 socket 监听不同的端口,并处理相应的消息,相互之间数据不干扰,可以通过多线程或者多进程实现。
以下是一个使用多线程的示例代码,每个线程都会监听不同的端口,并且使用独立的变量来存储相应的消息:
```python
import threading
import socket
# 定义一个处理消息的函数
def handle_message(port, msg_list):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', port))
s.listen(5)
print('Listening on port', port)
while True:
conn, addr = s.accept()
print('Connected by', addr)
data = conn.recv(1024)
if not data:
break
# 处理消息
msg_list.append((port, data.decode()))
conn.sendall('Received: '.encode() + data)
conn.close()
# 启动多个 socket 监听不同的端口,并使用独立的变量存储相应的消息
ports = [8000, 8001, 8002]
msg_lists = [[] for _ in range(len(ports))]
threads = []
for i, port in enumerate(ports):
t = threading.Thread(target=handle_message, args=(port, msg_lists[i]))
t.start()
threads.append(t)
# 等待所有线程结束
for t in threads:
t.join()
# 输出各个端口收到的消息
for i, msg_list in enumerate(msg_lists):
print('Messages received on port {}:'.format(ports[i]))
for msg in msg_list:
print(msg)
print()
```
在这个示例代码中,我们为每个线程传递了一个独立的列表 `msg_list`,用于存储相应的消息。不同线程之间的变量相互独立,不会相互干扰。当有消息到达时,线程会将消息添加到相应的列表中。最后,我们遍历所有的列表,输出各个端口收到的消息。
阅读全文