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<string> 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;
|
}
|
}
|
}
|
}
|