ClientHelp.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. using HPSocketCS;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using System.Windows.Forms;
  9. namespace HRT_Measure
  10. {
  11. public class ClientHelp
  12. {
  13. public HPSocketCS.TcpClient tcpClient = new HPSocketCS.TcpClient();
  14. public string IP;
  15. public ushort Port;
  16. public string Name;
  17. public bool isClientConnected = false;
  18. public string strClientRecv = "";
  19. public Thread thClientMonitor;
  20. public ClientHelp(string ip,ushort port,string name)
  21. {
  22. IP = ip;
  23. Port = port;
  24. Name = name;
  25. LoadClient();
  26. }
  27. public void LoadClient()
  28. {
  29. tcpClient.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(Client_OnPrepareConnect);
  30. tcpClient.OnConnect += new TcpClientEvent.OnConnectEventHandler(Client_OnConnect);
  31. tcpClient.OnReceive += new TcpClientEvent.OnReceiveEventHandler(Client_OnReceive);
  32. tcpClient.OnSend += new TcpClientEvent.OnSendEventHandler(Client_OnSend);
  33. tcpClient.OnClose += new TcpClientEvent.OnCloseEventHandler(Client_OnClose);
  34. if (TcpClientStart()) { ProgramHelp.Instance.SaveMsg("Client", $"Client:{Name} {IP}:{Port}连接成功", true); }
  35. else { ProgramHelp.Instance.SaveMsg("Client", $"Client{Name} {IP}:{Port}连接失败", true); }
  36. thClientMonitor = new Thread(new ThreadStart(ThClientMonitor));
  37. thClientMonitor.IsBackground = true;
  38. thClientMonitor.Start();
  39. }
  40. private void ThClientMonitor()
  41. {
  42. while (true)
  43. {
  44. try
  45. {
  46. if (!isClientConnected)
  47. {
  48. TcpClientStart();
  49. }
  50. }
  51. catch (Exception ex)
  52. {
  53. MessageBox.Show($"Client{Name} {IP}:{Port}重连错误:" + ex.Message);
  54. }
  55. Thread.Sleep(3000);
  56. }
  57. }
  58. public void DestroyRbtClient()
  59. {
  60. try
  61. {
  62. tcpClient.Destroy();
  63. }
  64. catch
  65. {
  66. }
  67. }
  68. #region RBT1
  69. public bool TcpClientStart()
  70. {
  71. try
  72. {
  73. //tcpClient.State = ServiceState.Started;
  74. if (tcpClient.Connect(IP, Port))
  75. {
  76. // tcpClient.State
  77. //isClientConnected = true;
  78. return true;
  79. }
  80. else
  81. {
  82. isClientConnected = false;
  83. return false;
  84. }
  85. }
  86. catch (Exception ex)
  87. {
  88. isClientConnected = false;
  89. MessageBox.Show($"Client{Name} {IP}:{Port}连接错误:" + ex.Message);
  90. return false;
  91. }
  92. }
  93. public void TcpClientSend(string s) //发送字符串
  94. {
  95. try
  96. {
  97. strClientRecv = "";
  98. string strSend = s.Trim() + "\r\n";
  99. byte[] buffer = System.Text.Encoding.Default.GetBytes(strSend);//byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
  100. tcpClient.Send(buffer, buffer.Length);//RbtsocketSend.Send(buffer);
  101. ProgramHelp.Instance.SaveMsg("Client", $"Client {Name} 发送 {s}", true);
  102. }
  103. catch (Exception ex) { MessageBox.Show("异常:" + ex.Message); }
  104. }
  105. private HandleResult Client_OnClose(TcpClient sender, SocketOperation enOperation, int errorCode)
  106. {
  107. isClientConnected = false;
  108. return HandleResult.Ok;
  109. }
  110. private HandleResult Client_OnSend(TcpClient sender, byte[] bytes)
  111. {
  112. return HandleResult.Ok;
  113. }
  114. private HandleResult Client_OnReceive(TcpClient sender, byte[] bytes)
  115. {
  116. try
  117. {
  118. string strRecv = Encoding.Default.GetString(bytes); //可以指定取开始到多少的字符 s = Encoding.Default.GetString(buffer, 0, 2);
  119. //ClsMy_Main.Instance.newMyLog.LogWhite("收到机械手回馈" + ":" + strRecv);//RbtsocketSend.RemoteEndPoint +//string[] split_s = s.Split(new Char[] { ',' });
  120. strRecv = strRecv.Replace("\n", "").Replace("\r", "");
  121. strClientRecv = strRecv;
  122. ProgramHelp.Instance.SaveMsg("Client", $"Client {Name}收到数据 {strRecv}", true);
  123. }
  124. catch (Exception ex)
  125. {
  126. MessageBox.Show($"Client {Name}接收异常:" + ex.Message);
  127. return HandleResult.Error;
  128. }
  129. return HandleResult.Ok;
  130. }
  131. private HandleResult Client_OnConnect(TcpClient sender)
  132. {
  133. isClientConnected = true;
  134. return HandleResult.Ok;
  135. }
  136. private static HandleResult Client_OnPrepareConnect(TcpClient sender, IntPtr socket)
  137. {
  138. return HandleResult.Ok;
  139. }
  140. #endregion
  141. }
  142. }