欢迎访问宙启技术站
智能推送

使用socket.socket实现多进程网络通信

发布时间:2023-12-29 00:43:42

使用socket.socket实现多进程网络通信,可以通过创建多个子进程来处理并发的网络连接请求。下面是一个使用例子。

首先,我们导入socket和multiprocessing模块,并创建一个socket对象用于监听连接请求。

import socket
import multiprocessing

HOST = '127.0.0.1'  # 监听的IP地址
PORT = 9000  # 监听的端口号

def handle_connection(client_socket, client_address):
    # 处理连接请求的函数
    print(f'Connected by {client_address}')

    try:
        while True:
            data = client_socket.recv(1024)  # 从客户端接收数据
            if not data:
                break
            # 处理数据,这里可以根据自己的需求进行逻辑处理
            processed_data = data.upper()
            client_socket.sendall(processed_data)  # 发送处理后的数据给客户端

    finally:
        client_socket.close()

def main():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((HOST, PORT))
    server_socket.listen()

    while True:
        client_socket, client_address = server_socket.accept()  # 接收连接请求
        process = multiprocessing.Process(target=handle_connection, args=(client_socket, client_address))
        process.start()

if __name__ == "__main__":
    main()

在例子中,我们创建了一个handle_connection函数来处理连接请求。该函数接收客户端socket和地址,然后通过一个while循环来不断接收客户端发送的数据,并对数据进行处理。在这个例子中,我们对数据进行了大写转换,并将处理后的数据发送回客户端。如果客户端发送的数据为空,我们则退出循环,并关闭客户端socket。

在主函数main中,我们创建了一个socket对象,并绑定到指定的IP地址和端口号。然后通过一个while循环来不断接受连接请求。当有客户端连接时,我们创建一个新的子进程来处理这个连接请求,将客户端socket和地址传递给handle_connection函数。然后启动子进程。

通过以上代码,我们实现了一个简单的多进程网络通信的服务器程序。可以同时处理多个客户端的连接请求,并并发的执行处理逻辑。在实际应用中,可以根据需求对handle_connection函数进行定制,实现更加复杂的逻辑处理。