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--路径前面的@的意思
    格式化规则修改prettierrc
    windows快捷键
    使用npm 添加less之后报错
    IOS中如何提高UITableView的性能?
    ffmpeg解码h264 Increasing reorder buffer
    Chrome浏览器关联文件图标空白问题解决方案
    mysql 问题sql 截图
    1、HR需要哪些自我提升
    1、文案职业大揭秘
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12720506.html
Copyright © 2011-2022 走看看