一、服务端
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()