Form_Home_TCP.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. using System;
  2. using HPSocket;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using csharp_networkprotocol_hpsocket;
  8. namespace MainForm
  9. {
  10. /// <summary>
  11. /// Form_Home类 - 操作TCP操作
  12. /// 简单拆分Form_Home类
  13. /// </summary>
  14. public partial class Form_Home
  15. {
  16. /// <summary>
  17. /// 包数据结束符
  18. /// </summary>
  19. private readonly string _endsWith = "\r";
  20. /// <summary>
  21. /// 初始化TCP连接
  22. /// </summary>
  23. private void HpTCPClientInit()
  24. {
  25. // 扫码枪_载具下线装备(弹夹上线)- 弹夹扫码
  26. // 扫码枪_载具下线装备(弹夹上线)- 载具扫码
  27. // 扫码枪_桁架 - 查询弹夹的状态
  28. // 扫码枪_载具上线装备(弹夹下线)- 弹夹扫码
  29. // 扫码枪_载具上线装备(弹夹下线)- 载具扫码
  30. #region 连接 扫码枪_载具下线装备(弹夹上线)- 弹夹扫码
  31. try
  32. {
  33. //初始化TCP
  34. _HPSocket_TcpClients[1].Address = GlobalContext.QrCodeTCPAddress1; // IP
  35. _HPSocket_TcpClients[1].Port = (ushort)GlobalContext.QrCodeTCPPort1; // 端口
  36. _HPSocket_TcpClients[1].SocketBufferSize = 4096; // 缓存4K
  37. _HPSocket_TcpClients[1]._client.OnPrepareConnect += OnPrepareConnect; // 准备连接了事件
  38. _HPSocket_TcpClients[1]._client.OnConnect += OnConnect; // 连接事件
  39. _HPSocket_TcpClients[1]._client.OnSend += OnSend; // 数据包发送事件
  40. _HPSocket_TcpClients[1]._client.OnReceive += OnReceive; // 数据包到达事件
  41. _HPSocket_TcpClients[1]._client.OnClose += OnClose; // TCP连接关闭事件
  42. //打开TCP
  43. bool connResult = _HPSocket_TcpClients[1].Connect(); // 连接
  44. if (connResult)
  45. AddMessage(LogType.Info, $"TCPClient[To载具下线装备_弹夹扫码:{_HPSocket_TcpClients[1].Address}:{_HPSocket_TcpClients[1].Port}]连接完成");
  46. else
  47. AddMessage(LogType.Error, $"TCPClient[To载具下线装备_弹夹扫码:{_HPSocket_TcpClients[1].Address}:{_HPSocket_TcpClients[1].Port}]连接失败");
  48. }
  49. catch (Exception ex)
  50. {
  51. string str = ex.StackTrace;
  52. AddMessage(LogType.Error, $"TCPClient[To载具下线装备_弹夹扫码:{_HPSocket_TcpClients[1].Address}:{_HPSocket_TcpClients[1].Port}]失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  53. }
  54. #endregion 连接 扫码枪_载具下线装备(弹夹上线)- 弹夹扫码
  55. #region 连接 扫码枪_载具下线装备(弹夹上线)- 载具扫码
  56. try
  57. {
  58. //初始化TCP
  59. _HPSocket_TcpClients[2].Address = GlobalContext.QrCodeTCPAddress2; // IP
  60. _HPSocket_TcpClients[2].Port = (ushort)GlobalContext.QrCodeTCPPort2; // 端口
  61. _HPSocket_TcpClients[2].SocketBufferSize = 4096; // 缓存4K
  62. _HPSocket_TcpClients[2]._client.OnPrepareConnect += OnPrepareConnect; // 准备连接了事件
  63. _HPSocket_TcpClients[2]._client.OnConnect += OnConnect; // 连接事件
  64. _HPSocket_TcpClients[2]._client.OnSend += OnSend; // 数据包发送事件
  65. _HPSocket_TcpClients[2]._client.OnReceive += OnReceive; // 数据包到达事件
  66. _HPSocket_TcpClients[2]._client.OnClose += OnClose; // TCP连接关闭事件
  67. //打开TCP
  68. bool connResult = _HPSocket_TcpClients[2].Connect(); // 连接
  69. if (connResult)
  70. AddMessage(LogType.Info, $"TCPClient[To载具下线装备_载具扫码:{_HPSocket_TcpClients[2].Address}:{_HPSocket_TcpClients[2].Port}]连接完成");
  71. else
  72. AddMessage(LogType.Error, $"TCPClient[To载具下线装备_载具扫码:{_HPSocket_TcpClients[2].Address}:{_HPSocket_TcpClients[2].Port}]连接失败");
  73. }
  74. catch (Exception ex)
  75. {
  76. string str = ex.StackTrace;
  77. AddMessage(LogType.Error, $"TCPClient[To载具下线装备_载具扫码:{_HPSocket_TcpClients[2].Address}:{_HPSocket_TcpClients[2].Port}]失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  78. }
  79. #endregion 连接 扫码枪_载具下线装备(弹夹上线)- 载具扫码
  80. #region 连接 扫码枪_桁架 - 查询弹夹的状态
  81. try
  82. {
  83. //初始化TCP
  84. _HPSocket_TcpClients[3].Address = GlobalContext.QrCodeTCPAddress3; // IP
  85. _HPSocket_TcpClients[3].Port = (ushort)GlobalContext.QrCodeTCPPort3; // 端口
  86. _HPSocket_TcpClients[3].SocketBufferSize = 4096; // 缓存4K
  87. _HPSocket_TcpClients[3]._client.OnPrepareConnect += OnPrepareConnect; // 准备连接了事件
  88. _HPSocket_TcpClients[3]._client.OnConnect += OnConnect; // 连接事件
  89. _HPSocket_TcpClients[3]._client.OnSend += OnSend; // 数据包发送事件
  90. _HPSocket_TcpClients[3]._client.OnReceive += OnReceive; // 数据包到达事件
  91. _HPSocket_TcpClients[3]._client.OnClose += OnClose; // TCP连接关闭事件
  92. //打开TCP
  93. bool connResult = _HPSocket_TcpClients[3].Connect(); // 连接
  94. if (connResult)
  95. AddMessage(LogType.Info, $"TCPClient[To桁架_查询弹夹的状态:{_HPSocket_TcpClients[3].Address}:{_HPSocket_TcpClients[3].Port}]连接完成");
  96. else
  97. AddMessage(LogType.Error, $"TCPClient[To桁架_查询弹夹的状态:{_HPSocket_TcpClients[3].Address}:{_HPSocket_TcpClients[3].Port}]连接失败");
  98. }
  99. catch (Exception ex)
  100. {
  101. string str = ex.StackTrace;
  102. AddMessage(LogType.Error, $"TCPClient[To桁架_查询弹夹的状态:{_HPSocket_TcpClients[3].Address}:{_HPSocket_TcpClients[3].Port}]失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  103. }
  104. #endregion 连接 扫码枪_桁架 - 查询弹夹的状态
  105. #region 连接 扫码枪_载具上线装备(弹夹下线)- 弹夹扫码
  106. try
  107. {
  108. //初始化TCP
  109. _HPSocket_TcpClients[4].Address = GlobalContext.QrCodeTCPAddress4; // IP
  110. _HPSocket_TcpClients[4].Port = (ushort)GlobalContext.QrCodeTCPPort4; // 端口
  111. _HPSocket_TcpClients[4].SocketBufferSize = 4096; // 缓存4K
  112. _HPSocket_TcpClients[4]._client.OnPrepareConnect += OnPrepareConnect; // 准备连接了事件
  113. _HPSocket_TcpClients[4]._client.OnConnect += OnConnect; // 连接事件
  114. _HPSocket_TcpClients[4]._client.OnSend += OnSend; // 数据包发送事件
  115. _HPSocket_TcpClients[4]._client.OnReceive += OnReceive; // 数据包到达事件
  116. _HPSocket_TcpClients[4]._client.OnClose += OnClose; // TCP连接关闭事件
  117. //打开TCP
  118. bool connResult = _HPSocket_TcpClients[4].Connect(); // 连接
  119. if (connResult)
  120. AddMessage(LogType.Info, $"TCPClient[To载具上线装备_弹夹扫码:{_HPSocket_TcpClients[4].Address}:{_HPSocket_TcpClients[4].Port}]连接完成");
  121. else
  122. AddMessage(LogType.Error, $"TCPClient[To载具上线装备_弹夹扫码:{_HPSocket_TcpClients[4].Address}:{_HPSocket_TcpClients[4].Port}]连接失败");
  123. }
  124. catch (Exception ex)
  125. {
  126. string str = ex.StackTrace;
  127. AddMessage(LogType.Error, $"TCPClient[To载具上线装备_弹夹扫码:{_HPSocket_TcpClients[4].Address}:{_HPSocket_TcpClients[4].Port}]失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  128. }
  129. #endregion 连接 扫码枪_载具上线装备(弹夹下线)- 弹夹扫码
  130. #region 连接 扫码枪_载具上线装备(弹夹下线)- 载具扫码
  131. try
  132. {
  133. //初始化TCP
  134. _HPSocket_TcpClients[5].Address = GlobalContext.QrCodeTCPAddress5; // IP
  135. _HPSocket_TcpClients[5].Port = (ushort)GlobalContext.QrCodeTCPPort5; // 端口
  136. _HPSocket_TcpClients[5].SocketBufferSize = 4096; // 缓存4K
  137. _HPSocket_TcpClients[5]._client.OnPrepareConnect += OnPrepareConnect; // 准备连接了事件
  138. _HPSocket_TcpClients[5]._client.OnConnect += OnConnect; // 连接事件
  139. _HPSocket_TcpClients[5]._client.OnSend += OnSend; // 数据包发送事件
  140. _HPSocket_TcpClients[5]._client.OnReceive += OnReceive; // 数据包到达事件
  141. _HPSocket_TcpClients[5]._client.OnClose += OnClose; // TCP连接关闭事件
  142. //打开TCP
  143. bool connResult = _HPSocket_TcpClients[5].Connect(); // 连接
  144. if (connResult)
  145. AddMessage(LogType.Info, $"TCPClient[To载具上线装备_载具扫码:{_HPSocket_TcpClients[5].Address}:{_HPSocket_TcpClients[5].Port}]连接完成");
  146. else
  147. AddMessage(LogType.Error, $"TCPClient[To载具上线装备_载具扫码:{_HPSocket_TcpClients[5].Address}:{_HPSocket_TcpClients[5].Port}]连接失败");
  148. }
  149. catch (Exception ex)
  150. {
  151. string str = ex.StackTrace;
  152. AddMessage(LogType.Error, $"TCPClient[To载具上线装备_载具扫码:{_HPSocket_TcpClients[5].Address}:{_HPSocket_TcpClients[5].Port}]失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  153. }
  154. #endregion 连接 扫码枪_载具上线装备(弹夹下线)- 载具扫码
  155. }
  156. #region 扫码数据解析
  157. /// <summary>
  158. /// 发送TCP数据-TCP1
  159. /// </summary>
  160. /// <param name="sendMsg"></param>
  161. public bool TCP_Send(HPSocket_TcpClientHelper hPSocket_TcpClientHelper, string sendMsg)
  162. {
  163. if (!hPSocket_TcpClientHelper._client.IsConnected || hPSocket_TcpClientHelper._client.State != ServiceState.Started)
  164. {
  165. hPSocket_TcpClientHelper.Connect();
  166. AddMessage(LogType.Info, "正在尝试连接仪器TCPServer...");
  167. Thread.Sleep(100);
  168. }
  169. if (string.IsNullOrEmpty(sendMsg))
  170. {
  171. AddMessage(LogType.Error, "TCP发送失败,发送信息不可为空!");
  172. return false;
  173. }
  174. byte[] bytes = Encoding.UTF8.GetBytes(sendMsg);
  175. #region
  176. //bytes = Encoding.UTF8.GetBytes("BR,0");
  177. //string[] strings2 = new string[bytes.Length];
  178. //for (int i = 0; i < bytes.Length; i++)
  179. //{
  180. // strings2[i] = bytes[i].ToString("X2");
  181. //}
  182. #endregion
  183. int length = bytes.Length;
  184. return hPSocket_TcpClientHelper.Send(bytes, length); // 发送
  185. }
  186. /// <summary>
  187. /// 发送TCP数据
  188. /// </summary>
  189. /// <param name="bytes"></param>
  190. public bool TCP_Send(HPSocket_TcpClientHelper hPSocket_TcpClientHelper, byte[] bytes)
  191. {
  192. if (!hPSocket_TcpClientHelper._client.IsConnected || hPSocket_TcpClientHelper._client.State != ServiceState.Started)
  193. {
  194. hPSocket_TcpClientHelper.Connect();
  195. AddMessage(LogType.Info, "正在尝试连接仪器TCPServer...");
  196. Thread.Sleep(100);
  197. }
  198. if (bytes == null || bytes.Length < 1)
  199. {
  200. AddMessage(LogType.Error, "TCP发送失败,发送信息不可为空!");
  201. return false;
  202. }
  203. return hPSocket_TcpClientHelper.Send(bytes, bytes.Length); // 发送
  204. }
  205. /// <summary>
  206. /// 接收串口数据
  207. /// </summary>
  208. /// <param name="receiveString">接收到的数据</param>
  209. /// <param name="address">IP</param>
  210. /// <param name="port">端口</param>
  211. private void ReceivedMsg(string receiveString, string address, ushort port)
  212. {
  213. try
  214. {
  215. //if (address == GlobalContext.MachineTCPAddress1) // 校验说明书1
  216. //{
  217. // int index = 1;
  218. // string itemName = "校验说明书1";
  219. // ReceivedMsg_Do(index, itemName, receiveString);
  220. //}
  221. //else if (address == GlobalContext.MachineTCPAddress2) // 校验说明书2
  222. //{
  223. // int index = 2;
  224. // string itemName = "校验说明书2";
  225. // ReceivedMsg_Do(index, itemName, receiveString);
  226. //}
  227. //else if (address == GlobalContext.MachineTCPAddress3) // 校验说明书3
  228. //{
  229. // int index = 3;
  230. // string itemName = "校验说明书3";
  231. // ReceivedMsg_Do(index, itemName, receiveString);
  232. //}
  233. //else if (address == GlobalContext.MachineTCPAddress4) // 校验纸袋料号
  234. //{
  235. // int index = 4;
  236. // string itemName = "校验纸袋料号";
  237. // ReceivedMsg_Do(index, itemName, receiveString);
  238. //}
  239. //else if (address == GlobalContext.MachineTCPAddress5) // 校验鼠标反正、颜色(上相机)
  240. //{
  241. // int index = 5;
  242. // string itemName = "上IV4相机校验";
  243. // ReceivedMsg_Do(index, itemName, receiveString);
  244. //}
  245. //else if (address == GlobalContext.MachineTCPAddress6) // 校验鼠标背盖颜色(下相机)
  246. //{
  247. // int index = 6;
  248. // string itemName = "下IV4相机校验";
  249. // ReceivedMsg_Do(index, itemName, receiveString);
  250. //}
  251. //else
  252. //{
  253. // AddMessage(LogType.Error, $"#获取仪器数据异常!未知IP{address}:{port}");
  254. //}
  255. }
  256. catch (Exception ex)
  257. {
  258. string str = ex.StackTrace;
  259. //用于运行日志记录
  260. AddMessage(LogType.Warning, "#获取仪器数据异常!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  261. }
  262. }
  263. /// <summary>
  264. /// 按照工位解析指令
  265. /// </summary>
  266. /// <param name="index">序列</param>
  267. /// <param name="itemName">工位名</param>
  268. /// <param name="receiveString">接收到的数据</param>
  269. private void ReceivedMsg_Do(int index, string itemName, string receiveString)
  270. {
  271. try
  272. {
  273. //// 切换程序编号指令 = "PW,{0}\r"; // PW,程序号\r切换(如:PW,000);返回 PW
  274. //if (receiveString.Contains("PW"))
  275. //{
  276. // switch (index)
  277. // {
  278. // case 1:
  279. // Parsing_PW_ModProgramNum(index, itemName, receiveString, MreReceive_ModProgramNum1[0]);
  280. // break;
  281. // case 2:
  282. // Parsing_PW_ModProgramNum(index, itemName, receiveString, MreReceive_ModProgramNum2[0]);
  283. // break;
  284. // case 3:
  285. // Parsing_PW_ModProgramNum(index, itemName, receiveString, MreReceive_ModProgramNum3[0]);
  286. // break;
  287. // case 4:
  288. // Parsing_PW_ModProgramNum(index, itemName, receiveString, MreReceive_ModProgramNum4[0]);
  289. // break;
  290. // case 5:
  291. // Parsing_PW_ModProgramNum(index, itemName, receiveString, MreReceive_ModProgramNum5[0]);
  292. // break;
  293. // case 6:
  294. // Parsing_PW_ModProgramNum(index, itemName, receiveString, MreReceive_ModProgramNum6[0]);
  295. // break;
  296. // }
  297. //}
  298. //// 更改主控字符指令 = "CW,{0},{1}\r"; // CW,序列号,校验字符串\r更改(如:CW,01,变量字符串);返回 CW,nn\r
  299. //else if (receiveString.Contains("CW"))
  300. //{
  301. // switch (index)
  302. // {
  303. // case 1:
  304. // Parsing_CW_ModMainCharacter(index, itemName, receiveString, MreReceive_ModMainCharacter1[0]);
  305. // break;
  306. // case 2:
  307. // Parsing_CW_ModMainCharacter(index, itemName, receiveString, MreReceive_ModMainCharacter2[0]);
  308. // break;
  309. // case 3:
  310. // Parsing_CW_ModMainCharacter(index, itemName, receiveString, MreReceive_ModMainCharacter3[0]);
  311. // break;
  312. // case 4:
  313. // Parsing_CW_ModMainCharacter(index, itemName, receiveString, MreReceive_ModMainCharacter4[0]);
  314. // break;
  315. // }
  316. //}
  317. //// 触发加读取判断结果指令 = "T2\r"; // T2\r启动;返回 RT,aaaaa\r;aa为工具结果,可以为OK或NG 或者 00 ~ 07
  318. //else if (receiveString.Contains("RT,"))
  319. //{
  320. // switch (index)
  321. // {
  322. // case 1:
  323. // Parsing_T2_Do(index, itemName, receiveString, MreReceive_Do1[0]);
  324. // break;
  325. // case 2:
  326. // Parsing_T2_Do(index, itemName, receiveString, MreReceive_Do2[0]);
  327. // break;
  328. // case 3:
  329. // Parsing_T2_Do(index, itemName, receiveString, MreReceive_Do3[0]);
  330. // break;
  331. // case 4:
  332. // Parsing_T2_Do(index, itemName, receiveString, MreReceive_Do4[0]);
  333. // break;
  334. // case 5:
  335. // Parsing_T2_Do(index, itemName, receiveString, MreReceive_Do5[0]);
  336. // break;
  337. // case 6:
  338. // Parsing_T2_Do(index, itemName, receiveString, MreReceive_Do6[0]);
  339. // break;
  340. // }
  341. //}
  342. //else
  343. //{
  344. // // 未知指令结果
  345. // AddMessage(LogType.Warning, $"获取'{itemName}'仪器数据异常!未知报文:{receiveString}");
  346. //}
  347. }
  348. catch (Exception ex)
  349. {
  350. string str = ex.StackTrace;
  351. //用于运行日志记录
  352. AddMessage(LogType.Warning, $"获取'{itemName}'仪器数据异常!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  353. }
  354. }
  355. #region TCP事件
  356. /// <summary>
  357. /// 数据包到达事件
  358. /// </summary>
  359. /// <param name="sender">客户端</param>
  360. /// <param name="data">数据</param>
  361. /// <returns></returns>
  362. private HandleResult OnReceive(IClient sender, byte[] data)
  363. {
  364. // <1> 获取附加数据对象
  365. if (!(sender.ExtraData is string))
  366. {
  367. return HandleResult.Error;
  368. }
  369. string extraDataStr = (string)sender.ExtraData;
  370. // <2> 将接收数据转换成字符串
  371. string msg = Encoding.UTF8.GetString(data);
  372. extraDataStr += msg; // 添加数据到缓存_不合格的数据添加到缓存区(用于粘包、拆包)
  373. // <3> 显示信息
  374. OnMessage(LogType.Info, string.Format("TCP客户端接收到TCP服务器[ID:{0},IP:‘{1}:{2}’]的信息;数据:[长度{3}]: {4}", sender.ConnectionId, sender.Address, sender.Port, data.Length, msg));
  375. // <4> 处理数据
  376. HandleResult result = HandleResult.Ignore;
  377. int index = extraDataStr.IndexOf(_endsWith);
  378. if (index == -1 || extraDataStr.Equals(_endsWith)) // 数据接收不完整,忽略后等待下一次接收
  379. {
  380. sender.ExtraData += extraDataStr;
  381. result = HandleResult.Ignore;
  382. return result;
  383. }
  384. else
  385. {
  386. sender.ExtraData = string.Empty;
  387. string dataStr = extraDataStr.Remove(index, _endsWith.Length);
  388. ReceivedMsg(dataStr, sender.Address, sender.Port);
  389. }
  390. return result;
  391. }
  392. /// <summary>
  393. /// 准备连接了事件
  394. /// </summary>
  395. /// <param name="sender">客户端</param>
  396. /// <param name="socket">客户端Id</param>
  397. /// <returns></returns>
  398. private HandleResult OnPrepareConnect(IClient sender, IntPtr socket)
  399. {
  400. sender.ExtraData = string.Empty; // 设置附加数据(用来做粘包处理)
  401. return HandleResult.Ok;
  402. }
  403. /// <summary>
  404. /// 连接事件
  405. /// </summary>
  406. /// <param name="sender">客户端</param>
  407. /// <returns></returns>
  408. private HandleResult OnConnect(IClient sender)
  409. {
  410. OnMessage(LogType.Info, string.Format("TCP客户端([{0}]{1}:{2})接入TCP服务器{3}:{4}", sender.ConnectionId, sender.BindAddress, sender.BindPort, sender.Address, sender.Port));
  411. return HandleResult.Ok;
  412. }
  413. /// <summary>
  414. /// 数据包发送事件
  415. /// </summary>
  416. /// <param name="sender">客户端</param>
  417. /// <param name="data">数据</param>
  418. /// <returns></returns>
  419. private HandleResult OnSend(IClient sender, byte[] data)
  420. {
  421. OnMessage(LogType.Debug, string.Format("TCP客户端发送数据到TCP服务器[{0}]{1}:{2};数据内容[长度{3}]:{4}", sender.ConnectionId, sender.Address, sender.Port, data.Length, Encoding.UTF8.GetString(data)));
  422. return HandleResult.Ok;
  423. }
  424. /// <summary>
  425. /// TCP连接关闭事件
  426. /// </summary>
  427. /// <param name="sender">客户端</param>
  428. /// <param name="socketOperation">关闭类型</param>
  429. /// <param name="errorCode">错误代码</param>
  430. /// <returns></returns>
  431. private HandleResult OnClose(IClient sender, SocketOperation socketOperation, int errorCode)
  432. {
  433. sender.ExtraData = null; // 删除附加数据
  434. OnMessage(LogType.Info, string.Format("TCP客户端断开与TCP服务器[{0}] {1}:{2}的连接, 断开类型: {3},错误代码: {4}", sender.ConnectionId, sender.Address, sender.Port, socketOperation.ToString(), errorCode));
  435. return HandleResult.Ok;
  436. }
  437. #endregion TCP事件
  438. #endregion 扫码数据解析
  439. }
  440. }