From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期五, 13 六月 2025 17:21:03 +0800
Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/device/TcpServer.cs |  142 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 142 insertions(+), 0 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/device/TcpServer.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/device/TcpServer.cs
new file mode 100644
index 0000000..833cbe1
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/device/TcpServer.cs
@@ -0,0 +1,142 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Sockets;
+
+namespace HH.WCS.Mobox3.FJJT.device
+{
+    public class TcpServer
+    {
+        public TcpServer(string ip) {
+            Init(ip);
+        }
+        private void Init(string ip) {
+            //鍒涘缓涓�釜鏂扮殑Socket,杩欓噷鎴戜滑浣跨敤鏈�父鐢ㄧ殑鍩轰簬TCP鐨凷tream Socket锛堟祦寮忓鎺ュ瓧锛�+            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+            try {
+                //灏嗚socket缁戝畾鍒颁富鏈轰笂闈㈢殑鏌愪釜绔彛锛岀鍙e簲璇ユ斁鍒伴厤缃枃浠朵腑
+                socket.Bind(new IPEndPoint(IPAddress.Parse(ip), 2023));
+                Console.WriteLine(2023);
+                //鍚姩鐩戝惉锛屽苟涓旇缃竴涓渶澶х殑闃熷垪闀垮害
+                socket.Listen(30);
+                //寮�鎺ュ彈瀹㈡埛绔繛鎺ヨ姹�+                socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);
+            }
+            catch (Exception e) {
+                Console.WriteLine(e.Message);
+            }
+        }
+        public static Dictionary<string, Socket> clients = new Dictionary<string, Socket>();
+        public static Dictionary<string, byte[]> buffers = new Dictionary<string, byte[]>();
+        public static void ClientAccepted(IAsyncResult ar) {
+
+            var socket = ar.AsyncState as Socket;
+            var client = socket.EndAccept(ar);
+            string remote_ip = ((System.Net.IPEndPoint)client.RemoteEndPoint).Address.ToString();
+            if (clients.Keys.Contains(remote_ip)) {
+                clients[remote_ip] = client;
+            }
+            else {
+                clients.Add(remote_ip, client);
+            }
+            if (!buffers.Keys.Contains(remote_ip)) {
+                buffers.Add(remote_ip, new byte[1024]);
+            }
+            //缁欏鎴风鍙戦�涓�釜娆㈣繋娑堟伅
+            //client.Send(Encoding.Unicode.GetBytes("Hi there, I accept you request at " + DateTime.Now.ToString()));
+            Console.WriteLine(remote_ip);
+
+            try {
+                client.BeginReceive(buffers[remote_ip], 0, buffers[remote_ip].Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);
+            }
+            catch (Exception ex) {
+                Console.WriteLine($"銆愭帴鏀跺鎴风鐨勬秷鎭紓甯搞�锛� + ex.Message);
+            }
+            //鍑嗗鎺ュ彈涓嬩竴涓鎴风璇锋眰
+            socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);
+        }
+
+
+        public static void ReceiveMessage(IAsyncResult ar) {
+            try {
+                var socket = ar.AsyncState as Socket;
+                string remote_ip = ((System.Net.IPEndPoint)socket.RemoteEndPoint).Address.ToString();
+                var length = socket.EndReceive(ar);
+                if (length == 0) {
+                    clients.Remove(remote_ip);
+                    buffers.Remove(remote_ip);
+                    return;
+                }
+                else {
+                    if (!clients.Keys.Contains(remote_ip)) {
+                        clients.Add(remote_ip, socket);
+                    }
+                    if (!buffers.Keys.Contains(remote_ip)) {
+                        buffers.Add(remote_ip, new byte[1024]);
+                    }
+                }
+                try {
+                    if (buffers.Keys.Contains(remote_ip)) {
+                        //璇诲彇鍑烘潵娑堟伅鍐呭
+                        var message = GetHexString(buffers[remote_ip], length);//16   10
+                        Console.WriteLine(message);
+                        if ( message.Length == 24 && message.Substring(0, 16) == "0000710200101400" ) {
+                            //鏄剧ず娑堟伅
+                            string msg = message.Substring(16,8);
+                            PlcHelper.Receive(remote_ip, msg);
+                            Array.Clear(buffers[remote_ip], 0, buffers[remote_ip].Length);//娓呯┖褰撳墠IP Buffer
+                        }
+                        else {
+                            LogHelper.Info($"銆怲CP淇℃伅鍗忚寮傚父銆戯細IP锛歿remote_ip},MSG锛歿message}", "TCP");
+                        }
+                    }
+                    else {
+                        if (!buffers.Keys.Contains(remote_ip)) {
+                            buffers.Add(remote_ip, new byte[1024]);
+                        }
+                    }
+                }
+                catch (Exception ex) {
+                    Console.WriteLine($"銆愬鐞嗗鎴风鐨勬秷鎭紓甯搞�锛� + ex.Message);
+                }
+                //鎺ユ敹涓嬩竴涓秷鎭�鍥犱负杩欐槸涓�釜閫掑綊鐨勮皟鐢紝鎵�互杩欐牱灏卞彲浠ヤ竴鐩存帴鏀舵秷鎭簡锛�+                socket.BeginReceive(buffers[remote_ip], 0, buffers[remote_ip].Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
+            }
+            catch (Exception ex) {
+                Console.WriteLine(ex.Message);
+            }
+        }
+
+        private static string GetHexString(byte[] buffer, int lenght) {
+            return BitConverter.ToString(buffer, 0, lenght).Replace("-", string.Empty).ToLower();
+        }
+
+        public static bool TcpServerSend(string ip, byte[] msg) {
+            if (clients.Keys.Contains(ip)) {
+                var client = clients[ip];
+                if (client.Connected) {
+                    try {
+                        client.Send(msg);
+                        return true;
+                    }
+                    catch (SocketException ex) {
+                        Console.WriteLine(ex.Message);
+                        clients[ip].Close();
+                        clients.Remove(ip);
+                    }
+                }
+                else {
+                    clients[ip].Close();
+                    clients.Remove(ip);
+                }
+            }
+            else {
+                Console.WriteLine("鏈壘鍒拌澶囩殑閾炬帴锛� + ip);
+            }
+            return false;
+
+        }
+       
+    }
+}

--
Gitblit v1.9.1