using Microsoft.Extensions.Logging; using Newtonsoft.Json; using SlnMesnac.Config; using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using TouchSocket.Core; using TouchSocket.Sockets; namespace SlnMesnac.TouchSocket { public class MyTcpClient : TcpClient { private DebugConfig config = DebugConfig.Instance; private TcpClient tcpClient = new TcpClient(); //识别结果 public delegate void RefreshResult(string result); public static event RefreshResult RefreshResultEvent; public MyTcpClient() { } public async Task StartAsync(string ip, string port) { try { tcpClient.Connecting = (client, e) => { Console.WriteLine($"客户端{client.Port}正在接入服务"); return EasyTask.CompletedTask; }; tcpClient.Connected = (client, e) => { Console.WriteLine($"客户端{client.Port}接入服务成功"); return EasyTask.CompletedTask; }; tcpClient.Disconnected = (client, e) => { Console.WriteLine($"客户端{client.Port}断开连接"); return EasyTask.CompletedTask; }; tcpClient.Received = (client, e) => { //从服务器收到信息 var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);//注意:数据长度是byteBlock.Len Console.WriteLine($"{client.Port}接收到信息:{mes}"); RefreshResultEvent?.Invoke(mes); return EasyTask.CompletedTask; }; await tcpClient.ConnectAsync($"{ip}:{port}"); }catch (Exception ex) { Console.WriteLine(ex.Message); } } public void sendMessage(string type,string msg) { if(type== "ocr") { var request = new Dictionary { { "image_path", msg }, { "service_type", "parse_labels" } // "check_texts", "check_duplicates", "parse_labels" }; // 转换为 JSON 并编码为字节 string message = JsonConvert.SerializeObject(request); byte[] requestBytes = Encoding.UTF8.GetBytes(message); // 发送请求的长度(4字节) byte[] lengthBytes = BitConverter.GetBytes(requestBytes.Length); if (BitConverter.IsLittleEndian) { Array.Reverse(lengthBytes); // 如果系统是小端序,需要反转字节顺序 } tcpClient.Send(lengthBytes,0, lengthBytes.Length); tcpClient.Send(requestBytes,0,requestBytes.Length); } else if(type == "pci") { // 使用转义字符正确构造字符串 string message = $"\x00\x00\x00+{{\"image_path\": \"{msg}\"}}"; tcpClient.Send(message); } } } }