2026-09-28 22:13:47 +08:00
|
|
|
import socket
|
|
|
|
|
import json
|
2026-10-02 23:43:18 +08:00
|
|
|
import time
|
2026-09-28 22:13:47 +08:00
|
|
|
|
2026-10-02 23:43:18 +08:00
|
|
|
def send_request(req_data, silent=False):
|
2026-10-02 20:39:34 +08:00
|
|
|
try:
|
|
|
|
|
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
|
client.connect(("127.0.0.1", 8080))
|
2026-10-02 23:43:18 +08:00
|
|
|
|
|
|
|
|
# 发送 UTF-8 编码的 JSON 请求
|
2026-10-02 20:39:34 +08:00
|
|
|
client.sendall(json.dumps(req_data).encode('utf-8'))
|
2026-10-02 23:43:18 +08:00
|
|
|
|
|
|
|
|
# 接收并解码结果
|
2026-10-02 20:39:34 +08:00
|
|
|
response = client.recv(4096)
|
2026-10-02 23:43:18 +08:00
|
|
|
|
|
|
|
|
if not silent:
|
|
|
|
|
print(">>> 收到回复:")
|
|
|
|
|
print(json.dumps(json.loads(response.decode('utf-8')), indent=2, ensure_ascii=False))
|
|
|
|
|
print("-" * 50)
|
|
|
|
|
|
2026-10-02 20:39:34 +08:00
|
|
|
client.close()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"连接失败: {e}")
|
2026-09-28 22:13:47 +08:00
|
|
|
|
2026-10-02 20:39:34 +08:00
|
|
|
if __name__ == "__main__":
|
2026-10-02 23:43:18 +08:00
|
|
|
print("=== 测试 1: 验证 C++ DLL 工具调用 ===")
|
2026-10-02 20:39:34 +08:00
|
|
|
request_call = {
|
|
|
|
|
"jsonrpc": "2.0",
|
2026-10-02 23:43:18 +08:00
|
|
|
"id": 4,
|
2026-10-02 20:39:34 +08:00
|
|
|
"method": "tools/call",
|
|
|
|
|
"params": {
|
2026-10-02 23:43:18 +08:00
|
|
|
"name": "draw_circle_cpp",
|
2026-10-02 20:39:34 +08:00
|
|
|
"arguments": {
|
2026-10-02 23:43:18 +08:00
|
|
|
"cx": 2000.0,
|
|
|
|
|
"cy": 2000.0,
|
|
|
|
|
"r": 500.0
|
2026-10-02 20:39:34 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-10-02 23:43:18 +08:00
|
|
|
send_request(request_call)
|
|
|
|
|
|
|
|
|
|
# 稍作停顿,方便观察 CAD 屏幕
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
print("\n=== 测试 2: C++ 并发写入压力测试 (生成10个同心圆) ===")
|
|
|
|
|
for i in range(10):
|
|
|
|
|
radius = 100.0 + i * 50.0
|
|
|
|
|
req = {
|
|
|
|
|
"jsonrpc": "2.0",
|
|
|
|
|
"id": 100 + i,
|
|
|
|
|
"method": "tools/call",
|
|
|
|
|
"params": {
|
|
|
|
|
"name": "draw_circle_cpp",
|
|
|
|
|
"arguments": {
|
|
|
|
|
"cx": 4000.0,
|
|
|
|
|
"cy": 2000.0,
|
|
|
|
|
"r": radius
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
# 连续快速发送,不打印详细返回以模拟极限并发
|
|
|
|
|
send_request(req, silent=True)
|
|
|
|
|
|
|
|
|
|
print(">>> 并发指令发送完毕,请检查 CAD 屏幕。")
|