import socket import threading import subprocess import netifaces def create_server_socket(host, port): socket_server = socket.socket() socket_server.bind((host, port)) socket_server.listen(5) print(f"服务端已启动,地址{host},端口{port}") print(f"正在等待客户端连接...") # 开启多线程,收发来自多个客户端的数据 num = 0 # 标记客户端的编号 while True: num += 1 conn, address = socket_server.accept() print(f"服务端已接受到客户端 {num}号 的连接请求,客户端信息:{address}") client_handler = threading.Thread(target=handle_client, args=(conn, address, num)) client_handler.start() # 处理收发数据 def handle_client(conn, address, num): while True: # 接收客户端发来的数据 data_from_client: str = conn.recv(1024).decode("UTF-8") print(f"客户端 {num}号:{address}发来的消息是:{data_from_client}") # 发送消息到客户端 msg = input(f"请输入你要回复客户端 {num}号:{address}的消息:") if msg == 'exit': break conn.send(msg.encode("UTF-8")) # encode将字符串编码为字节数组对象 conn.close() # def handle_client(conn, address, client_num): # try: # while True: # data_from_client = conn.recv(1024).decode("UTF-8") # if not data_from_client: # break # print(f"客户端 {client_num} 号({address}) 发来的消息是:{data_from_client}") # if data_from_client.strip() == '1': # print("执行 roscore 命令...") # subprocess.run(['roscore']) # else: # msg = input(f"请输入你要回复客户端 {client_num} 号({address}) 的消息:") # if msg.lower() == 'exit': # break # conn.send(msg.encode("UTF-8")) # except Exception as e: # print(f"客户端 {client_num} 号({address}) 处理时发生错误:{e}") # finally: # conn.close() # print(f"客户端 {client_num} 号({address}) 已断开连接。") if __name__ == '__main__': # 获取本机(计算机)名 hostname = socket.gethostname() # 获取本机(计算机)ip ip = socket.gethostbyname(hostname) print(hostname, ip) server_host = ip server_port = int(input("请输入服务端port:")) create_server_socket(server_host, server_port)