实现一个简单的TCP Server,具备如下能力
1、接收客户端请求,解析出携带的message信息
2、根据message信息,匹配data目录下{message}.json文件的数据并返回给客户端
tcp_server.py
import json
import os
import socket
from threading import Thread
class TCPServer:
def __init__(self, host='0.0.0.0', port=8888, data_dir='data'):
self.host = host
self.port = port
self.data_dir = data_dir
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
def start(self):
self.server_socket.bind((self.host, self.port))
self.server_socket.listen(5)
print(f"Server listening on {self.host}:{self.port}")
try:
while True:
client_socket, addr = self.server_socket.accept()
print(f"Connection from {addr}")
client_thread = Thread(
target=self.handle_client,
args=(client_socket,)
)
client_thread.start()
except KeyboardInterrupt:
print("Server shutting down...")
self.server_socket.close()
def handle_client(self, client_socket):
try:
request = client_socket.recv(1024).decode('utf-8').strip()
if not request:
return
print(f"Received request: {request}")
response = self.process_request(request)
client_socket.send(response.encode('utf-8'))
except Exception as e:
print(f"Error handling client: {e}")
finally:
client_socket.close()
def process_request(self, request):
json_file = os.path.join(self.data_dir, f"{request}.json")
if os.path.exists(json_file):
try:
with open(json_file, 'r', encoding='utf-8') as f:
data = json.load(f)
return json.dumps(data, ensure_ascii=False)
except Exception as e:
return f"Error reading JSON file: {str(e)}"
else:
return f"JSON file not found for request: {request}"
if __name__ == '__main__':
server = TCPServer()
server.start()
tcp_client.py
import socket
def send_request(message, host='127.0.0.1', port=8888):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((host, port))
s.sendall(message.encode('utf-8'))
response = s.recv(1024).decode('utf-8')
print(f"Response: {response}")
if __name__ == '__main__':
send_request("gateway_status") # 请求test.json文件
data文件示例
调用示例:
1、启动server后,客户端传一个message="gateway_status"的信息,服务端可识别该信息,并把data目录下的gateway_status.json返回给客户端