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()
  • 相关阅读:
    forward redirect 区别
    request response 区别
    Java集合 初步了解
    通过session统计当前在线人数
    Session保存用户名到Session域对象中
    Cookie获取用户的访问记录
    表单中有关于爱好的多选框, 篮球,足球,游泳,跑步, 再有一个多选框,代表全选
    jQuery常用子元素过滤选择器
    jQuery常用属性过滤选择器
    jQuery常见可见性过滤选择器
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12720506.html
Copyright © 2011-2022 走看看