remove_comment.py
import re
def remove_comments(file_path):
with open(file_path, "r") as file:
content=file.read()
content=re.sub(r'/\*.*?\*/','', content, flags=re.DOTALL)
content=re.sub(r'//.*','',content)
print(content)
new_file_path = file_path.replace('.h', '_no_comments.h')
with open(new_file_path, 'w') as new_file:
new_file.write(content)
print("ok")
if __name__ == "__main__":
import sys
if len(sys.argv)!=2:
print("usage: python <this script> <input .h file>")
else:
file_path=sys.argv[1]
remove_comments(file_path)
telnet_test_server.py
import socket
import threading
import time
import signal
class TelnetTestServer:
def __init__(self, host='0.0.0.0', port=23):
self.host = host
self.port = port
self.server_socket = None
self.running = False
self.client_threads = []
self.lock = threading.Lock()
def start(self):
signal.signal(signal.SIGINT, self.handle_signal)
signal.signal(signal.SIGTERM, self.handle_signal)
self.running = True
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_socket.setblocking(False)
self.server_socket.bind((self.host, self.port))
self.server_socket.listen(5)
print(f"Telnet test server started on {self.host}:{self.port}")
print("Press Ctrl+C to stop server")
try:
while self.running:
try:
client_socket, client_addr = self.server_socket.accept()
print(f"New connection from {client_addr}")
client_thread = threading.Thread(
target=self.handle_client,
args=(client_socket, client_addr),
daemon=True
)
with self.lock:
self.client_threads.append(client_thread)
client_thread.start()
except BlockingIOError:
time.sleep(0.1)
finally:
self.stop()
def handle_client(self, client_socket, client_addr):
try:
client_socket.sendall(b"Welcome to the test Telnet server!\r\n")
client_socket.sendall(b"Type 'exit' to disconnect\r\n")
client_socket.sendall(b"Type 'info' to get server info\r\n")
client_socket.sendall(b"> ")
while self.running:
client_socket.settimeout(1.0)
try:
data = client_socket.recv(1024)
except socket.timeout:
continue
if not data:
break
data_str = data.decode('utf-8', errors='ignore').strip()
print(f"Received from {client_addr}: {data_str}")
if data_str.lower() == 'exit':
client_socket.sendall(b"Goodbye!\r\n")
break
elif data_str.lower() == 'info':
response = f"Server info: Python Telnet Test Server running on {self.host}:{self.port}\r\n"
client_socket.sendall(response.encode('utf-8'))
elif data_str.lower() == 'help':
client_socket.sendall(b"Commands: exit, info, help\r\n")
else:
response = f"You sent: {data_str}\r\n"
client_socket.sendall(response.encode('utf-8'))
client_socket.sendall(b"> ")
except Exception as e:
if self.running:
print(f"Error handling client {client_addr}: {e}")
finally:
client_socket.close()
print(f"Connection with {client_addr} closed")
with self.lock:
self.client_threads = [t for t in self.client_threads if t.is_alive()]
def stop(self):
self.running = False
if self.server_socket:
self.server_socket.close()
print("Server socket closed")
start_time = time.time()
with self.lock:
for thread in self.client_threads:
while thread.is_alive() and (time.time() - start_time) < 2:
time.sleep(0.1)
print("Server stopped successfully")
def handle_signal(self, signum, frame):
"""信号处理函数:捕获Ctrl+C后触发服务器停止"""
print("\nReceived stop signal (Ctrl+C), stopping server...")
self.running = False
if __name__ == "__main__":
server = TelnetTestServer(port=2323)
server.start()
multi_chat_server.py
import socket
import threading
import time
import signal
class ChatServer:
def __init__(self, host='0.0.0.0', port=8888):
self.host = host
self.port = port
self.server_socket = None
self.clients = []
self.clients_lock = threading.Lock()
self.running = False
self.server_thread = None
def signal_handler(self, signum, frame):
"""处理Ctrl+C信号,优雅退出"""
print("\nReceived Ctrl+C, shutting down server...")
self.running = False
def start(self):
signal.signal(signal.SIGINT, self.signal_handler)
signal.signal(signal.SIGTERM, self.signal_handler)
self.running = True
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_socket.setblocking(False)
self.server_socket.bind((self.host, self.port))
self.server_socket.listen(5)
print(f"Chat server started on {self.host}:{self.port}")
print("Press Ctrl+C to stop server")
self.server_thread = threading.Thread(target=self.accept_connections)
self.server_thread.start()
self.server_thread.join()
self.stop()
def accept_connections(self):
"""接受客户端连接的主循环(非阻塞)"""
while self.running:
try:
client_socket, client_addr = self.server_socket.accept()
print(f"New connection from {client_addr}")
client_thread = threading.Thread(
target=self.handle_client,
args=(client_socket, client_addr),
daemon=True
)
client_thread.start()
except BlockingIOError:
time.sleep(0.1)
except Exception as e:
if self.running:
print(f"Error accepting connection: {e}")
time.sleep(0.1)
def handle_client(self, client_socket, client_addr):
"""处理单个客户端的消息交互"""
username = None
try:
client_socket.settimeout(10.0)
welcome_msg = "Please enter your username: ".encode('utf-8')
client_socket.sendall(welcome_msg)
print(f"Sent username request to {client_addr}")
username_data = client_socket.recv(1024).decode('utf-8', errors='ignore').strip()
if not username_data:
raise Exception("No username received")
username = username_data[:20]
print(f"Received username '{username}' from {client_addr}")
with self.clients_lock:
self.clients.append((client_socket, username))
join_msg = f"[System] {username} has joined the chat!\n".encode('utf-8')
self.broadcast(join_msg, client_socket)
client_socket.sendall(f"Welcome {username}! Type 'exit' to leave.\n".encode('utf-8'))
client_socket.settimeout(1.0)
while self.running:
try:
data = client_socket.recv(1024)
except socket.timeout:
continue
if not data:
raise Exception("Connection closed by client")
message = data.decode('utf-8', errors='ignore').strip()
print(f"Received from {username}: {message}")
if message.lower() == 'exit':
client_socket.sendall("Goodbye!\n".encode('utf-8'))
break
full_msg = f"[{username}]: {message}\n".encode('utf-8')
self.broadcast(full_msg, client_socket)
except socket.timeout:
print(f"Timeout with {client_addr} (no activity for 10s)")
except Exception as e:
print(f"Error handling {client_addr}: {e}")
finally:
client_socket.close()
print(f"Closed socket for {client_addr}")
with self.clients_lock:
self.clients = [(sock, name) for sock, name in self.clients if sock != client_socket]
if username:
leave_msg = f"[System] {username} has left the chat.\n".encode('utf-8')
self.broadcast(leave_msg, None)
print(f"Connection with {client_addr} ({username or 'unknown'}) fully closed")
def broadcast(self, message, exclude_socket):
"""广播消息给所有客户端(排除发送者)"""
with self.clients_lock:
clients_copy = list(self.clients)
for client_socket, _ in clients_copy:
if client_socket != exclude_socket:
try:
client_socket.sendall(message)
except:
pass
def stop(self):
"""停止服务器并清理资源"""
self.running = False
print("Stopping server...")
if self.server_socket:
try:
self.server_socket.close()
except Exception as e:
print(f"Error closing server socket: {e}")
with self.clients_lock:
for client_socket, username in self.clients:
try:
client_socket.sendall("Server is shutting down.\n".encode('utf-8'))
client_socket.close()
print(f"Closed connection with {username}")
except:
pass
self.clients.clear()
print("Server stopped successfully")
if __name__ == "__main__":
server = ChatServer(port=8888)
server.start()