using HPSocketCS; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace HRT_Measure { public class ClientHelp { public HPSocketCS.TcpClient tcpClient = new HPSocketCS.TcpClient(); public string IP; public ushort Port; public string Name; public bool isClientConnected = false; public string strClientRecv = ""; public Thread thClientMonitor; public ClientHelp(string ip,ushort port,string name) { IP = ip; Port = port; Name = name; LoadClient(); } public void LoadClient() { tcpClient.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(Client_OnPrepareConnect); tcpClient.OnConnect += new TcpClientEvent.OnConnectEventHandler(Client_OnConnect); tcpClient.OnReceive += new TcpClientEvent.OnReceiveEventHandler(Client_OnReceive); tcpClient.OnSend += new TcpClientEvent.OnSendEventHandler(Client_OnSend); tcpClient.OnClose += new TcpClientEvent.OnCloseEventHandler(Client_OnClose); if (TcpClientStart()) { ProgramHelp.Instance.SaveMsg("Client", $"Client:{Name} {IP}:{Port}连接成功", true); } else { ProgramHelp.Instance.SaveMsg("Client", $"Client{Name} {IP}:{Port}连接失败", true); } thClientMonitor = new Thread(new ThreadStart(ThClientMonitor)); thClientMonitor.IsBackground = true; thClientMonitor.Start(); } private void ThClientMonitor() { while (true) { try { if (!isClientConnected) { TcpClientStart(); } } catch (Exception ex) { MessageBox.Show($"Client{Name} {IP}:{Port}重连错误:" + ex.Message); } Thread.Sleep(3000); } } public void DestroyRbtClient() { try { tcpClient.Destroy(); } catch { } } #region RBT1 public bool TcpClientStart() { try { //tcpClient.State = ServiceState.Started; if (tcpClient.Connect(IP, Port)) { // tcpClient.State //isClientConnected = true; return true; } else { isClientConnected = false; return false; } } catch (Exception ex) { isClientConnected = false; MessageBox.Show($"Client{Name} {IP}:{Port}连接错误:" + ex.Message); return false; } } public void TcpClientSend(string s) //发送字符串 { try { strClientRecv = ""; string strSend = s.Trim() + "\r\n"; byte[] buffer = System.Text.Encoding.Default.GetBytes(strSend);//byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str); tcpClient.Send(buffer, buffer.Length);//RbtsocketSend.Send(buffer); ProgramHelp.Instance.SaveMsg("Client", $"Client {Name} 发送 {s}", true); } catch (Exception ex) { MessageBox.Show("异常:" + ex.Message); } } private HandleResult Client_OnClose(TcpClient sender, SocketOperation enOperation, int errorCode) { isClientConnected = false; return HandleResult.Ok; } private HandleResult Client_OnSend(TcpClient sender, byte[] bytes) { return HandleResult.Ok; } private HandleResult Client_OnReceive(TcpClient sender, byte[] bytes) { try { string strRecv = Encoding.Default.GetString(bytes); //可以指定取开始到多少的字符 s = Encoding.Default.GetString(buffer, 0, 2); //ClsMy_Main.Instance.newMyLog.LogWhite("收到机械手回馈" + ":" + strRecv);//RbtsocketSend.RemoteEndPoint +//string[] split_s = s.Split(new Char[] { ',' }); strRecv = strRecv.Replace("\n", "").Replace("\r", ""); strClientRecv = strRecv; ProgramHelp.Instance.SaveMsg("Client", $"Client {Name}收到数据 {strRecv}", true); } catch (Exception ex) { MessageBox.Show($"Client {Name}接收异常:" + ex.Message); return HandleResult.Error; } return HandleResult.Ok; } private HandleResult Client_OnConnect(TcpClient sender) { isClientConnected = true; return HandleResult.Ok; } private static HandleResult Client_OnPrepareConnect(TcpClient sender, IntPtr socket) { return HandleResult.Ok; } #endregion } }