using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace CellStepSender { public class TcpClientTool { private string _ip; private int _port; private bool _isConnected = false; // 是否连接 private Socket _clientSocket; // 套接字 private Thread _receiveThread = null; // 接收线程 private volatile bool needRecieve = true; public event EventHandler ExecuteMessageChanged; public TcpClientTool(string ip, int port) { this._ip = ip; this._port = port; } public void Connect() { try { _clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ipaddress = IPAddress.Parse(this._ip); IPEndPoint endpoint = new IPEndPoint(ipaddress, _port); _clientSocket.Connect(endpoint); _isConnected = true; _receiveThread = new Thread(Received); _receiveThread.IsBackground = true; _receiveThread.Start(); } catch (Exception ex) { needRecieve = false; _receiveThread?.Abort(); _receiveThread = null; _clientSocket.Close(); _isConnected = false; throw ex; } } public void Disconnect() { needRecieve = false; _clientSocket.Close(); _receiveThread?.Abort(); _receiveThread = null; _isConnected = false; } public void Send(string data) { byte[] arrClientSendMsg = Encoding.UTF8.GetBytes(data); _clientSocket.Send(arrClientSendMsg); } public void Received() { //while (needRecieve) //{ // byte[] arrRecMsg = new byte[1024 * 1024]; // int length = _clientSocket.Receive(arrRecMsg); // string strRecMsg = Encoding.UTF8.GetString(arrRecMsg, 0, length); // ExecuteMessageChanged?.Invoke(this, strRecMsg); // Thread.Sleep(100); //} } public bool SendStep( string ip, int port, int ovenIndex, int cellIndex, string step, string value, string limitUp, string limitDown, string unit, string result, string updateTime, out string errorMsg) { errorMsg = null; try { if (!_isConnected) { errorMsg = "Not Connected"; return false; } string msg = $"{ovenIndex};{cellIndex};{step},{value},{limitUp},{limitDown},{unit},{result},{updateTime}\n"; Send(msg); return true; } catch (Exception ex) { errorMsg = ex.Message; return false; } } } }