zoukankan      html  css  js  c++  java
  • Python 之socket多线程

    一、服务端

    import socket
    from threading import Thread
    import socketserver
    
    g_socket = None
    g_conn_pool = []
    
    def handle_client():
        while True:
            client, addr = g_socket.accept()
            print(addr)
            g_conn_pool.append(client)
            t = Thread(target=message_handle, args=(client,))
            t.setDaemon(True)
            t.start()
    
    def message_handle(client):
            while True:
                data = client.recv(1024).decode('utf-8')
                print(data)
                if data == 'exit':
                    g_conn_pool.remove(client)
                    client.send(data.encode('utf-8'))
                    print('下线了')
                    break
                client.send(data.encode('utf-8'))
    
    def main():
        global g_socket, g_conn_pool
        g_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        g_socket.bind(('127.0.0.1', 12306))
        g_socket.listen(5)
        print("服务端已启动,等待客户端连接...")
    
        t = Thread(target=handle_client)
        t.setDaemon(True)
        t.start()
        while True:
            cmd = input("请输入操作:")
            if cmd == '':
                continue
            if int(cmd) == 1:
                print("--------------------------")
                print("当前在线人数:", len(g_conn_pool))
            if cmd == 'exit':
                exit()
    
    if __name__ == '__main__':
        main()

    二、客户端

    import socket
    import time
    import queue
    from threading import Thread
    
    q = queue.Queue()
    
    def recv_message(s):
        while True:
            data = s.recv(1024).decode('utf-8').strip()
            print(data)
            if data == 'exit':
                q.put(1)
                break
            send_message(s)
        s.close()
        
    def send_message(s):
        data = input('input:')
        s.send(data.encode('utf-8'))
    
    def main():
        s = socket.create_connection(('127.0.0.1', 12306))
        s.send('连接服务器'.encode('utf-8'))
        
        Thread(target=recv_message, args=(s,)).start()
        time.sleep(1)
        while q.empty():
            pass
                
        
    if __name__ == '__main__':
        main()
  • 相关阅读:
    vue之插槽
    微信公众号-关注和取消关注
    微信公众号-消息响应
    微信公众号-验证接入
    微信公众号-开发工具natapp内网穿透安装和使用
    windows安装PHP5.4+Apache2.4+Mysql5.5
    php各种主流框架的优缺点总结
    php框架的特性总结
    什么是php?php的优缺点有哪些?与其它编程语言的优缺点?
    二进制、八进制、十进制、十六进制之间转换
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12720506.html
Copyright © 2011-2022 走看看