Browse Source

修改吃啥

callm 2 days ago
parent
commit
6705e100af

+ 360 - 7
UAS_MES_HYSX/FunctionCode/Make/Make_ListenSocket.cs

@@ -3,9 +3,14 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
+using System.IO;
 using System.Linq;
+using System.Net;
+using System.Net.Sockets;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
+using System.Web.Services.Description;
 using System.Windows.Forms;
 
 namespace UAS_MES_NEW.Make
@@ -17,6 +22,84 @@ namespace UAS_MES_NEW.Make
             InitializeComponent();
         }
 
+        SocketHandle client;
+
+        private void Connet_Click(object sender, EventArgs e)
+        {
+            if (Connet.Text == "开启连接")
+            {
+                Connet.Text = "关闭连接";
+            }
+            else if (Connet.Text == "关闭连接")
+            {
+                Connet.Text = "开启连接";
+            }
+        }
+
+        private async void Start_Click(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(IpPort.Text))
+            {
+                ShowMsg(0, "请填写Socket服务地址");
+                return;
+            }
+
+            string ip = IpPort.Text.Split(':')[0];
+            int port = int.Parse(IpPort.Text.Split(':')[1]);
+            client = new SocketHandle(ip, port);
+
+            client.OnFileReceived += OnFileReceived;
+            client.OnMessageReceived += OnMessageReceived;
+            client.OnConnectionStatusChanged += OnConnectionStatusChanged;
+
+            if (Start.Text == "开启监听")
+            {
+                Start.Text = "关闭监听";
+                IpPort.Enabled = true;
+                client.Close();
+            }
+            else if (Start.Text == "关闭监听")
+            {
+                Start.Text = "开启监听";
+                IpPort.Enabled = false;
+
+                string msg = await client.ConnectAsync();
+                if (msg.StartsWith("NG"))
+                {
+                    ShowMsg(0, msg);
+                }
+                ShowMsg(1, msg);
+
+                string savePath = @"C:\Users\MI\Desktop\testEquiment\ReceivedFiles\received_file.txt";
+                msg = await client.ReceiveFileAsync(savePath);
+                if (msg.StartsWith("NG"))
+                {
+                    ShowMsg(0, msg);
+                }
+                ShowMsg(1, msg);
+            }
+        }
+        private async void OnFileReceived(string fileName, string savePath)
+        {
+            Console.WriteLine("文件接收完成: " + fileName + " 保存到: " + savePath);
+
+            string localFilePath = @"C:\Users\MI\Desktop\testEquiment\ReceivedFiles\send_file.txt";
+            string msg = await client.SendFileAsync(localFilePath);
+            if (msg.StartsWith("NG"))
+            {
+                ShowMsg(0, msg);
+            }
+            ShowMsg(1, "文件发送成功");
+        }
+        private void OnMessageReceived(string message)
+        {
+            Console.WriteLine("收到服务器消息: " + message);
+        }
+        private void OnConnectionStatusChanged(string status)
+        {
+            Console.WriteLine("连接状态: " + status);
+        }
+
         private void ShowMsg(int type, string msg)
         {
             msg = msg.Replace("\r", "").Replace("\n", "");
@@ -25,24 +108,294 @@ namespace UAS_MES_NEW.Make
             if (type == 0)
             {
                 OperatResult.AppendText(showMsg, Color.Red);
-                statusLab.Text = "状况异常";
             }
             else if (type == 1)
             {
                 OperatResult.AppendText(showMsg, Color.Green);
-                statusLab.Text = "运行正常";
             }
         }
 
-        private void Start_Click(object sender, EventArgs e)
+        public class SocketHandle
         {
-            if(Start.Text == "开启监听")
+            private Socket clientSocket;
+            private string serverIP;
+            private int serverPort;
+            private bool isConnected = false;
+
+            // 事件定义
+            public event Action<string, string> OnFileReceived;
+            public event Action<string> OnMessageReceived;
+            public event Action<string> OnConnectionStatusChanged;
+
+            public SocketHandle(string ip, int port)
             {
-                Start.Text = "关闭监听";
+                serverIP = ip;
+                serverPort = port;
+                clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             }
-            else if (Start.Text == "关闭监听")
+
+            public async Task<string> ConnectAsync()
             {
-                Start.Text = "开启监听";
+                try
+                {
+                    IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);
+                    await Task.Factory.FromAsync(
+                        clientSocket.BeginConnect,
+                        clientSocket.EndConnect,
+                        endPoint,
+                        null);
+                    isConnected = true;
+                    if (OnConnectionStatusChanged != null)
+                    {
+                        OnConnectionStatusChanged("连接成功");
+                    }
+                    StartListeningAsync();
+
+                    return "OK,连接成功";
+                }
+                catch (Exception ex)
+                {
+                    return $"NG,连接失败: {ex.Message}";
+                }
+            }
+
+            private async void StartListeningAsync()
+            {
+                while (isConnected)
+                {
+                    try
+                    {
+                        byte[] lengthBytes = new byte[4];
+                        int receivedLength = await ReceiveDataAsync(lengthBytes, 0, lengthBytes.Length);
+
+                        if (receivedLength == 0) // 连接已断开
+                        {
+                            isConnected = false;
+                            if (OnConnectionStatusChanged != null)
+                            {
+                                OnConnectionStatusChanged("连接已断开");
+                            }
+                            break;
+                        }
+
+                        int messageLength = BitConverter.ToInt32(lengthBytes, 0);
+
+                        // 接收消息内容
+                        byte[] messageBytes = new byte[messageLength];
+                        await ReceiveDataAsync(messageBytes, 0, messageLength);
+                        string message = Encoding.UTF8.GetString(messageBytes);
+
+                        // 根据消息类型触发不同事件
+                        ProcessMessage(message);
+                    }
+                    catch (Exception ex)
+                    {
+                        isConnected = false;
+                        break;
+                    }
+                }
+            }
+            private void ProcessMessage(string message)
+            {
+                if (message.StartsWith("[FILE_TRANSFER]"))
+                {
+                    if (OnMessageReceived != null)
+                    {
+                        OnMessageReceived("服务器准备发送文件: " + message.Substring(15));
+                    }
+                }
+                else
+                {
+                    if (OnMessageReceived != null)
+                    {
+                        OnMessageReceived(message);
+                    }
+                }
+            }
+
+            public async Task<string> SendFileAsync(string filePath)
+            {
+                if (!isConnected)
+                {
+                    return "未连接到服务器";
+                }
+
+                if (!File.Exists(filePath))
+                {
+                    return "NG,文件不存在: " + filePath;
+                }
+
+                try
+                {
+                    FileInfo fileInfo = new FileInfo(filePath);
+                    string fileName = fileInfo.Name;
+                    long fileSize = fileInfo.Length;
+
+                    // 发送文件头信息 (文件名长度 + 文件名 + 文件大小)
+                    byte[] fileNameBytes = Encoding.UTF8.GetBytes(fileName);
+                    byte[] fileNameLengthBytes = BitConverter.GetBytes(fileNameBytes.Length);
+                    byte[] fileSizeBytes = BitConverter.GetBytes(fileSize);
+
+                    // 组合发送数据
+                    byte[] header = new byte[fileNameLengthBytes.Length + fileNameBytes.Length + fileSizeBytes.Length];
+                    Array.Copy(fileNameLengthBytes, 0, header, 0, fileNameLengthBytes.Length);
+                    Array.Copy(fileNameBytes, 0, header, fileNameLengthBytes.Length, fileNameBytes.Length);
+                    Array.Copy(fileSizeBytes, 0, header, fileNameLengthBytes.Length + fileNameBytes.Length, fileSizeBytes.Length);
+
+                    await SendDataAsync(header);
+
+                    // 发送文件内容
+                    using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+                    {
+                        byte[] buffer = new byte[4096];
+                        int bytesRead;
+                        while ((bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
+                        {
+                            await SendDataAsync(buffer, 0, bytesRead);
+                        }
+                    }
+
+                    return "OK,发送文件成功";
+                }
+                catch (Exception ex)
+                {
+                    return "NG,发送文件失败: " + ex.Message;
+                }
+            }
+
+            public async Task<string> ReceiveFileAsync(string savePath)
+            {
+                if (!isConnected)
+                {
+                    return "未连接到服务器";
+                }
+
+                try
+                {
+                    // 接收文件头信息
+                    byte[] fileNameLengthBytes = new byte[4];
+                    await ReceiveDataAsync(fileNameLengthBytes, 0, fileNameLengthBytes.Length);
+                    int fileNameLength = BitConverter.ToInt32(fileNameLengthBytes, 0);
+
+                    byte[] fileNameBytes = new byte[fileNameLength];
+                    await ReceiveDataAsync(fileNameBytes, 0, fileNameLength);
+                    string fileName = Encoding.UTF8.GetString(fileNameBytes);
+
+                    //byte[] fileSizeBytes = new byte[8];
+                    byte[] fileSizeBytes = new byte[4];
+                    await ReceiveDataAsync(fileSizeBytes, 0, fileSizeBytes.Length);
+                    long fileSize = BitConverter.ToInt64(fileSizeBytes, 0);
+
+                    // 确保保存目录存在
+                    string directory = Path.GetDirectoryName(savePath);
+                    if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
+                    {
+                        Directory.CreateDirectory(directory);
+                    }
+
+                    // 接收文件内容
+                    using (FileStream fileStream = new FileStream(savePath, FileMode.Create, FileAccess.Write))
+                    {
+                        byte[] buffer = new byte[4096];
+                        long totalReceived = 0;
+
+                        while (totalReceived < fileSize)
+                        {
+                            int toRead = (int)Math.Min(buffer.Length, fileSize - totalReceived);
+                            int received = await ReceiveDataAsync(buffer, 0, toRead);
+                            if (received <= 0)
+                            {
+                                break;
+                            }
+                            await fileStream.WriteAsync(buffer, 0, received);
+                            totalReceived += received;
+                        }
+                    }
+
+                    if (OnFileReceived != null)
+                    {
+                        OnFileReceived(fileName, savePath);
+                    }
+                    return "OK,接收文件成功";
+                }
+                catch (Exception ex)
+                {
+                    return "NG,接收文件失败: " + ex.Message;
+                }
+            }
+
+            public async Task<string> SendMessageAsync(string message)
+            {
+                if (!isConnected)
+                {
+                    return "未连接到服务器";
+                }
+                try
+                {
+                    byte[] messageBytes = Encoding.UTF8.GetBytes(message);
+                    byte[] lengthBytes = BitConverter.GetBytes(messageBytes.Length);
+
+                    await SendDataAsync(lengthBytes);
+                    await SendDataAsync(messageBytes);
+                    return "OK,发送消息成功";
+                }
+                catch (Exception ex)
+                {
+                    return "NG,发送消息失败: " + ex.Message;
+                }
+            }
+
+            public async Task<string> ReceiveMessageAsync()
+            {
+                try
+                {
+                    // 先接收消息长度
+                    byte[] lengthBytes = new byte[4];
+                    await ReceiveDataAsync(lengthBytes, 0, lengthBytes.Length);
+                    int messageLength = BitConverter.ToInt32(lengthBytes, 0);
+
+                    // 接收消息内容
+                    byte[] messageBytes = new byte[messageLength];
+                    await ReceiveDataAsync(messageBytes, 0, messageLength);
+
+                    return "OK," + Encoding.UTF8.GetString(messageBytes);
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine("接收消息失败: " + ex.Message);
+                    return null;
+                }
+            }
+
+            private async Task SendDataAsync(byte[] data)
+            {
+                await SendDataAsync(data, 0, data.Length);
+            }
+
+            private async Task SendDataAsync(byte[] data, int offset, int size)
+            {
+                await Task.Factory.FromAsync((callback, state) => 
+                    clientSocket.BeginSend(data, offset, size, SocketFlags.None, callback, state),
+                    clientSocket.EndSend,
+                    null);
+            }
+
+            private async Task<int> ReceiveDataAsync(byte[] data, int offset, int size)
+            {
+                return await Task.Factory.FromAsync((callback, state) => 
+                    clientSocket.BeginReceive(data, offset, size, SocketFlags.None, callback, state),
+                    clientSocket.EndReceive,
+                    null);
+            }
+
+            public void Close()
+            {
+                isConnected = false;
+                if (clientSocket != null && clientSocket.Connected)
+                {
+                    clientSocket.Shutdown(SocketShutdown.Both);
+                    clientSocket.Close();
+                }
             }
         }
     }

+ 14 - 4
UAS_MES_HYSX/FunctionCode/Make/Make_SMTStencil.cs

@@ -101,10 +101,6 @@ namespace UAS_MES_NEW.Make
 
         private void Receive_Click(object sender, EventArgs e)
         {
-            if (ma_code.Text == "")
-            {
-                MessageBox.Show("工单号不能为空");
-            }
             DataTable dt;
 
             int WaringCount = int.Parse(dh.GetConfig("WaringCount", "Stencil").ToString());
@@ -143,6 +139,11 @@ namespace UAS_MES_NEW.Make
             }
             if (st_kind == "钢网")
             {
+                if (ma_code.Text == "")
+                {
+                    MessageBox.Show("工单号不能为空");
+                    return;
+                }
                 //限制钢网使用的产品
                 dt = (DataTable)dh.ExecuteSql("select 1 from STENILCANUSEPRO where sp_stcode='" + SU_DEVCODE.Text + "' and sp_prodcode='" + ma_prodcode.Text + "'", "select");
                 if (dt.Rows.Count == 0)
@@ -155,6 +156,10 @@ namespace UAS_MES_NEW.Make
                         return;
                     }
                 }
+            }
+            else if (st_kind == "刮刀")
+            {
+
             }
             dt = (DataTable)dh.ExecuteSql("select em_name from employee where em_code='" + em_code.Text + "'", "select");
             if (dt.Rows.Count > 0)
@@ -248,6 +253,11 @@ namespace UAS_MES_NEW.Make
                         em_code1.Text = "";
                         SU_RETURNIFCLEAN.Checked = false;
                         Return.Enabled = false;
+                        ST_ENSIONA.Text = "";
+                        ST_ENSIONB.Text = "";
+                        ST_ENSIONC.Text = "";
+                        ST_ENSIOND.Text = "";
+                        ST_ENSIONE.Text = "";
                         Confirm.PerformClick();
                     }
                     else

+ 2 - 2
UAS_Tools_HY/PublicMethods/ConnectDB.cs

@@ -8,8 +8,8 @@ namespace UAS_Tools_HY.PublicMethods
 {
     internal class ConnectDB
     {
-        private static readonly string ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.81.208)(PORT=11687))(CONNECT_DATA=(SERVICE_NAME=orcl)));User Id=N_MES_HY;Password=select!#%*(;";
-
+        //private static readonly string ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.81.208)(PORT=11687))(CONNECT_DATA=(SERVICE_NAME=orcl)));User Id=N_MES_HY;Password=select!#%*(;";
+        private static readonly string ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.18.6.220)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));User Id=N_MES_HY;Password=select!#%*(;";
         public static bool TestConnection()
         {
             try