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()
  • 相关阅读:
    项目团队技术个人(提拔篇)
    Android开发者掘金(2)—技术篇
    Android开发者掘金(3) 未来
    在Android应用中放置AdMob广告的详细教程
    ant build apk
    手机产品设计中的 15 大禁忌
    Android开发者掘金(1)
    项目团队技术个人(专业篇)
    #pragram预处理指令
    c++ 异常机制
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12720506.html
Copyright © 2011-2022 走看看