forked from logzhan/RobotKernal-UESTC
68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
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) |