From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点

---
 PLCHelper/RestTcpClient.cs |  114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 114 insertions(+), 0 deletions(-)

diff --git a/PLCHelper/RestTcpClient.cs b/PLCHelper/RestTcpClient.cs
new file mode 100644
index 0000000..968bc9c
--- /dev/null
+++ b/PLCHelper/RestTcpClient.cs
@@ -0,0 +1,114 @@
+锘縰sing HslCommunication;
+using System;
+using System.IO;
+using System.Net.Sockets;
+using System.Text;
+
+namespace PLCHelper
+{
+    public class RestTcpClient : IDisposable
+    {
+        public string IP { get; private set; }
+        public int Port { get; private set; }
+
+        public int ReceiveTimeout { get; set; } = 5000;
+
+        private TcpClient tcpClient;
+        private Stream Stream;
+        private BinaryReader reader;
+        private BinaryWriter writer;
+
+        public RestTcpClient(string ip, int port)
+        {
+            IP = ip;
+            Port = port;
+        }
+
+        public void ConnectServer()
+        {
+            tcpClient = new TcpClient(IP, Port);
+            tcpClient.ReceiveTimeout = ReceiveTimeout;
+            Stream = tcpClient.GetStream();
+            reader = new BinaryReader(Stream);
+            writer = new BinaryWriter(Stream);
+        }
+
+        public OperateResult<bool> ReadBool(string data)
+        {
+            OperateResult<bool> res = new OperateResult<bool>();
+            if (Request(data, out string response, out string errMsg))
+            {
+                res.Content = bool.Parse(response);
+                res.IsSuccess = true;
+            }
+            else
+            {
+                res.Message = errMsg;
+                res.IsSuccess = false;
+            }
+            return res;
+        }
+
+        public OperateResult Write(string data, bool val)
+        {
+            OperateResult res = new OperateResult();
+            if (Request(data, out string response, out string errMsg))
+            {
+                res.IsSuccess = true;
+            }
+            else
+            {
+                res.Message = errMsg;
+                res.IsSuccess = false;
+            }
+            return res;
+        }
+
+        public void Send(string data)
+        {
+            data = data + "\r";
+            writer.Write(Encoding.UTF8.GetBytes(data));
+            writer.Flush();
+        }
+
+        public bool Request(string data, out string response, out string errMsg)
+        {
+            lock (this)
+            {
+                errMsg = string.Empty;
+                response = string.Empty;
+                try
+                {
+                    Send(data);
+                    response = Receive();
+                    return true;
+                }
+                catch (Exception ex)
+                {
+                    errMsg = ex.Message;
+                    return false;
+                }
+            }
+        }
+
+        private string Receive()
+        {
+            byte[] array = new byte[1024];
+            int num = tcpClient.Client.Receive(array);
+            if (num == 0)
+            {
+                throw new Exception("Closed");
+            }
+            var bytes = new byte[num];
+            Array.Copy(array, bytes, num);
+            string data = Encoding.UTF8.GetString(bytes);
+            if (data.EndsWith("\r")) data = data.Substring(0, data.Length - 1);
+            return data;
+        }
+
+        public void Dispose()
+        {
+            tcpClient.Close();
+        }
+    }
+}

--
Gitblit v1.9.1