ServerHelp.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using HPSocketCS;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net.Sockets;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using HRT_Measure;
  11. namespace HRT_Measure
  12. {
  13. public class ServerHelp
  14. {
  15. public ServerHelp(string ip, ushort port, string name)
  16. {
  17. IP = ip;
  18. Port = port;
  19. Name = name;
  20. LoadServer();
  21. }
  22. public TcpServer server = new HPSocketCS.TcpServer();
  23. public IntPtr serverID;
  24. public string IP;
  25. public ushort Port;
  26. public string Name;
  27. public byte[] buffer = new byte[2048];
  28. public string strRecv;
  29. public bool isServerConnected = false;
  30. public void LoadServer()
  31. {
  32. try
  33. {
  34. isServerConnected = false;
  35. //绑定事件
  36. //绑定监听地址前触发
  37. server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(Server_OnPrepareListen);
  38. //客户端连接请求被接受后触发
  39. server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(Server_OnAccept);
  40. //发送消息后触发
  41. server.OnSend += new TcpServerEvent.OnSendEventHandler(Server_OnSend);
  42. //收到消息后触发
  43. server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(Server_OnReceive);
  44. //连接关闭后触发(服务端的连接通常是多个,只要某一个连接关闭了都会触发)
  45. server.OnClose += new TcpServerEvent.OnCloseEventHandler(Server_OnClose);
  46. //组件停止后触发
  47. server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(Server_OnShutdown);
  48. server.IpAddress = IP;
  49. server.Port = Port;
  50. server.Start();
  51. strRecv = "";
  52. }
  53. catch (Exception ex)
  54. {
  55. MessageBox.Show(ex.ToString());
  56. }
  57. }
  58. public void Close()
  59. {
  60. try
  61. {
  62. server.Disconnect(serverID);
  63. }
  64. catch (Exception)
  65. {
  66. }
  67. }
  68. #region 事件
  69. private HandleResult Server_OnShutdown()
  70. {
  71. //ClsSanheHelp.Instance.SaveMsg("System", $"服务器【 {strIP} :{iPort} 】停止监听……", true);
  72. ProgramHelp.Instance.SaveMsg("Server", $"服务器【 {IP} :{Port} 】停止监听……", true);
  73. isServerConnected = false;
  74. return HandleResult.Ok;
  75. }
  76. private HandleResult Server_OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
  77. {
  78. string strIP = "";
  79. ushort port = 0;
  80. server.GetRemoteAddress(connId, ref strIP, ref port);
  81. if (errorCode == 0)
  82. {
  83. ProgramHelp.Instance.SaveMsg("Server", $"连接已断开,连接ID:{connId}", true);
  84. }
  85. else
  86. {
  87. ProgramHelp.Instance.SaveMsg("Server", $"客户端连接发生异常,已经断开连接,连接ID:{connId},错误代码:{errorCode}", true);
  88. }
  89. isServerConnected = false;
  90. return HandleResult.Ok;
  91. }
  92. private HandleResult Server_OnReceive(IntPtr connId, byte[] bytes)
  93. {
  94. try
  95. {
  96. string strRecv = Encoding.Default.GetString(bytes); //可以指定取开始到多少的字符 s = Encoding.Default.GetString(buffer, 0, 2);
  97. this.strRecv = strRecv.Replace("\r", "").Replace("\n", "");
  98. ProgramHelp.Instance.SaveMsg("Server", $"服务器{IP}收到 回馈数据 {strRecv}", true);
  99. }
  100. catch (Exception ex)
  101. {
  102. MessageBox.Show($"{IP}服务器接收异常:" + ex.Message);
  103. return HandleResult.Error;
  104. }
  105. return HandleResult.Ok;
  106. }
  107. private HandleResult Server_OnSend(IntPtr connId, byte[] bytes)
  108. {
  109. string sendedStr = Encoding.Default.GetString(bytes);
  110. ProgramHelp.Instance.SaveMsg("Server", $"向连接ID:{connId} 的客户端发送信息成功,内容:{sendedStr},长度:{bytes.Length}", true);
  111. return HandleResult.Ok;
  112. }
  113. private HandleResult Server_OnAccept(IntPtr connId, IntPtr pClient)
  114. {
  115. string strIP = "";
  116. ushort port = 0;
  117. server.GetRemoteAddress(connId, ref strIP, ref port);
  118. serverID = connId;
  119. ProgramHelp.Instance.SaveMsg("Server", $"收到客户端连接请求------>IP:【{strIP}:{port}】,连接ID:【{connId}】,与服务器建立连接!", true);
  120. isServerConnected = true;
  121. return HandleResult.Ok;
  122. }
  123. private HandleResult Server_OnPrepareListen(IntPtr soListen)
  124. {
  125. //ClsSanheHelp.Instance.SaveMsg("System", $"服务器【{strIP}:{iPort} 】开始监听……", true);
  126. ProgramHelp.Instance.SaveMsg("Server", $"服务器【{IP}:{Port} 】开始监听……", true);
  127. return HandleResult.Ok;
  128. }
  129. #endregion
  130. public void Send(string strMessage)
  131. {
  132. strMessage += "\r";
  133. try
  134. {
  135. strRecv = "";
  136. byte[] sendBytes = Encoding.Default.GetBytes(strMessage);
  137. server.Send(serverID, sendBytes, sendBytes.Length);
  138. }
  139. catch (Exception)
  140. {
  141. }
  142. }
  143. public string Receive()
  144. {
  145. return strRecv;
  146. }
  147. }
  148. }