笔记本📒

python多任务版TCP服务端程序开发

2021-01-19  本文已影响0人  涓涓自然卷

使用循环接收客户端的连接请求

使用循环接收客户端的连接请求.png

代码🌰

import socket


# 1、使用循环接收客户端的连接请求
if __name__ == '__main__':
    # 1、创建服务端套接字对象
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口复用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 2、绑定IP地址和端口号
    # tcp_server_socket.bind(("10.4.161.48", 8888))
    # 如果bind中的参数第一个IP地址元素设置为"",就是默认为 本机IP地址
    tcp_server_socket.bind(("", 8888))
    # 3、设置监听 128:代表服务端等待排队连接的最大数量
    tcp_server_socket.listen(128)

    while True:
        # 4、等待接受客户端的连接请求 accept阻塞等待 返回一个用以和客户端通讯socket,客户端的地址
        conn_socket,ip_port = tcp_server_socket.accept()
        print("客户端地址:", ip_port)
        # 5、接收数据
        recv_data = conn_socket.recv(1024)
        print("接受到的数据", recv_data.decode())
        # 6、发送数据
        conn_socket.send("客户端你的数据我收到了。".encode())
        # 7、关闭套接字
        conn_socket.close()

    tcp_server_socket.close()

运行效果

效果图.png

多任务版

import socket
import threading


# 处理客户端函数
def handle_client(conn_socket):
    # 5、接收数据
    recv_data = conn_socket.recv(1024)
    print("接受到的数据", recv_data.decode())
    # 6、发送数据
    conn_socket.send("客户端你的数据我收到了。".encode())
    # 7、关闭套接字
    conn_socket.close()


# 1、使用循环接收客户端的连接请求
if __name__ == '__main__':
    # 1、创建服务端套接字对象
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口复用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 2、绑定IP地址和端口号
    # tcp_server_socket.bind(("10.4.161.48", 8888))
    # 如果bind中的参数第一个IP地址元素设置为"",就是默认为 本机IP地址
    tcp_server_socket.bind(("", 8888))
    # 3、设置监听 128:代表服务端等待排队连接的最大数量
    tcp_server_socket.listen(128)

    while True:
        # 4、等待接受客户端的连接请求 accept阻塞等待 返回一个用以和客户端通讯socket,客户端的地址
        conn_socket, ip_port = tcp_server_socket.accept()
        print("客户端地址:", ip_port)

        # 使用多线程去接收多个客户端的请求
        sub_thread = threading.Thread(target=handle_client, args=(conn_socket,))
        sub_thread.start()

    tcp_server_socket.close()

运行效果

多线程运行效果.png
上一篇下一篇

猜你喜欢

热点阅读