python cli.py
telnet 0 6666
import click
import socket
import threading
def handle_command(command, conn):
"""处理用户输入的命令"""
if command.startswith('greet '):
name = command[len('greet '):]
response = f"Hello, {name}!\n"
elif command.startswith('square '):
try:
number = int(command[len('square '):])
result = number * number
response = f"The square of {number} is {result}\n"
except ValueError:
response = "Error: Please provide a valid integer.\n"
elif command == 'exit':
response = "Exiting...\n"
conn.sendall(response.encode('utf-8'))
conn.close()
return True
else:
response = f"Unknown command: {command}\n"
conn.sendall(response.encode('utf-8'))
return False
def handle_client_connection(conn):
"""处理客户端的连接"""
with conn:
click.echo("Client connected")
conn.sendall(b"Welcome to the interactive CLI. Type 'greet <name>', 'square <number>', or 'exit' to quit.\n")
while True:
data = conn.recv(1024).decode('utf-8').strip()
# if not data:
# continue
if handle_command(data, conn):
break
@click.command()
def cli():
"""启动一个交互式 CLI 工具"""
# 启动 TCP 服务器
server_address = ('0.0.0.0', 6666)
click.echo(f"Starting server on {server_address[0]}:{server_address[1]}")
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
server_socket.bind(server_address)
server_socket.listen()
while True:
conn, addr = server_socket.accept()
click.echo(f"Connection from {addr}")
threading.Thread(target=handle_client_connection, args=(conn,)).start()
if __name__ == '__main__':
cli()