zoukankan      html  css  js  c++  java
  • 【Python高级编程026 ● 网络编程 ● 多任务版TCP服务端程序开发】


    ---------Python基础编程---------

    Author : AI菌


    【内容讲解】

    一、解释:
        能够同时服务于多个客户端的TCP服务端程序
    二、具体实现步骤
        1、编写一个TCP服务端程序,循环等待接受客户端的连接请求
        2、当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞
        3、把创建的子线程设置成为守护主线程,防止主线程无法退出。

    【代码演示】

    """
    一、解释:
        能够同时服务于多个客户端的TCP服务端程序
    二、具体实现步骤
        1、编写一个TCP服务端程序,循环等待接受客户端的连接请求
        2、当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞
        3、把创建的子线程设置成为守护主线程,防止主线程无法退出。
    """
    
    import socket
    import threading
    
    
    # 处理客户端请求的函数
    def handle_client(new_socket, ip_port):
        # 循环接收客户端的数据
        while True:
            # 接收客户端发送的数据
            recv_data = new_socket.recv(1024)
            if recv_data:
                # 对二进制数据进行解码
                recv_content = recv_data.decode("utf-8")
                print("接收客户端的数据为:", recv_content)
                # 发送数据
                new_socket.send("服务端".encode("utf-8"))
            else:
                print("客户端下线:", ip_port)
                break
        # 关闭套接字
        new_socket.close()
    
    
    if __name__ == '__main__':
        # 创建tcp服务端套接字
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 设置端口号复用,程序退出端口号立即释放
        tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        # 绑定端口号
        tcp_server_socket.bind(("", 9090))
        # 设置监听
        tcp_server_socket.listen(128)
    
        # 循环等待接受客户端的连接请求
        while True:
            # 等待接受客户端的连接请求
            new_socket, ip_port = tcp_server_socket.accept()
            print("客户端为:", ip_port)
            # 创建子线程,专门负责处理客户端请求
            sub_thread = threading.Thread(target=handle_client, args=(new_socket, ip_port))
            # 设置守护主线程,防止服务端无法关闭
            sub_thread.setDaemon(True)
            # 启动子线程执行任务
            sub_thread.start()
    
        # 提示: 服务端程序需要一直运行,所以tcp服务端的套接字可以不用关闭
        # tcp_server_socket.close()

    【运行结果】

    TCP客户端程序(网络调试助手):

    作为TCP服务端的程序:

    客户端为: ('192.168.1.235', 39664)
    客户端为: ('192.168.1.235', 39666)
    接收客户端的数据为: client_1
    接收客户端的数据为: client_2

    【往期精彩】

    ▷【Python基础编程196 ● 读取文件的4种方式】
    ▷【Python基础编程197 ● 读取文件的4种方式】
    ▷【Python基础编程198 ● 读取文件的4种方式】
    ▷【Python基础编程199 ● Python怎么读/写很大的文件】
    ▷【Python基础编程200 ● 读取文件的4种方式】
    ▷【Python基础编程201 ● 读取文件的4种方式】
    ▷【Python基础编程202 ● 读取文件的4种方式】
    ▷【Python基础编程203 ● 读取文件的4种方式】

    【加群交流】



  • 相关阅读:
    羊年春节微信数据大解析
    微信公众号推荐(自己关注的微信公众平台导航)
    微信要革"传统电视"的命吗?
    微信是在学苹果模式吗?
    发微信红包啦!借花献佛
    有原创保护能力的公众帐号可申请页面模版功能和图文消息正文插入历史群发链接
    编程能力与编程年龄
    代码执行的效率
    对九个超级程序员的采访
    编程真难啊
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/13650763.html
Copyright © 2011-2022 走看看