要实现不使用循环向多个连接导向套接字发送消息,可以使用多线程或异步编程的方法。
import socket
import threading
def send_message(connection, message):
connection.send(message.encode())
def main():
connections = [] # 存储所有连接的套接字
# 创建套接字并建立连接
for i in range(5):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 8888))
connections.append(s)
message = "Hello, world!"
# 创建线程发送消息
threads = []
for conn in connections:
t = threading.Thread(target=send_message, args=(conn, message))
t.start()
threads.append(t)
# 等待所有线程结束
for t in threads:
t.join()
# 关闭所有连接
for conn in connections:
conn.close()
if __name__ == '__main__':
main()
asyncio
库实现异步发送消息。以下是一个示例代码:import asyncio
async def send_message(connection, message):
connection.write(message.encode())
await connection.drain()
async def main():
connections = [] # 存储所有连接的套接字
# 建立连接
for i in range(5):
reader, writer = await asyncio.open_connection('localhost', 8888)
connections.append(writer)
message = "Hello, world!"
# 异步发送消息
tasks = []
for conn in connections:
task = asyncio.create_task(send_message(conn, message))
tasks.append(task)
# 等待所有任务结束
await asyncio.gather(*tasks)
# 关闭所有连接
for conn in connections:
conn.close()
if __name__ == '__main__':
asyncio.run(main())
这两种方法都可以实现向多个连接导向套接字发送消息,具体选择哪种方法取决于你的需求和使用场景。
上一篇:不使用循环为列赋值
下一篇:不使用循环训练自编码器