Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

121 linhas
3.3 KiB

  1. /* Describtion : Class for Tcp Network Connection
  2. * Company : Wuxi Xinje
  3. * Author : Somuns
  4. * DateTime : 2021/1/18
  5. */
  6. using System;
  7. using System.Diagnostics;
  8. using System.Net;
  9. using System.Net.Sockets;
  10. using System.Windows.Forms;
  11. namespace StuMgmLib.MyNameSpace
  12. {
  13. // 还有一种验证连接方式: Token
  14. public class TcpConn
  15. {
  16. public EndPoint Ep;
  17. private IPEndPoint ipp = null;
  18. private Socket socket = null;
  19. private Socket socketClient = null;
  20. private bool my_SocketExist = false;
  21. /// <summary>
  22. /// 判断服务器开关
  23. /// </summary>
  24. public bool SocketExist
  25. {
  26. get { return my_SocketExist; }
  27. private set { my_SocketExist = value; }
  28. }
  29. public void GetIPAddress(ComboBox cb)
  30. {
  31. cb.Items.Clear();
  32. foreach (IPAddress ipAddr in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
  33. {
  34. if (ipAddr.AddressFamily.ToString() == "InterNetwork")
  35. {
  36. cb.Items.Add(ipAddr.ToString());
  37. }
  38. }
  39. if (cb.FindString("127.0.0.1") == -1)
  40. cb.Items.Add("127.0.0.1");
  41. }
  42. #region 开启服务器
  43. public void OpenServer(string ipAddr, int port)
  44. {
  45. ipp = new IPEndPoint(IPAddress.Parse(ipAddr), port);
  46. socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  47. socket.Bind(ipp);
  48. socket.Listen(0);
  49. SocketExist = true;
  50. }
  51. #endregion
  52. #region 关闭服务器
  53. public void CloseServer()
  54. {
  55. if (socketClient != null)
  56. socketClient.Close();
  57. if (socket != null)
  58. socket.Close();
  59. SocketExist = false;
  60. }
  61. #endregion
  62. #region 接收客户端连接
  63. /// <summary>
  64. /// 接收客户端连接
  65. /// </summary>
  66. public void AcceptConn()
  67. {
  68. try
  69. {
  70. socketClient = socket.Accept(); // 阻塞等待客户端连接
  71. Ep = socketClient.RemoteEndPoint;
  72. }
  73. catch (SocketException se)
  74. {
  75. Debug.Print(se.Message);
  76. }
  77. }
  78. #endregion
  79. const int recvTimeOut = -1; // 设置接收超时时间
  80. const int recvLength = 65535;
  81. #region 接收数据
  82. /// <summary>
  83. /// 接收数据
  84. /// </summary>
  85. public void AcpMsg()
  86. {
  87. byte[] clientSend = new byte[recvLength]; // 定义接收数组
  88. try
  89. {
  90. socketClient.ReceiveTimeout = recvTimeOut;
  91. socketClient.Receive(clientSend);
  92. byte[] serverSend = SystemCtrl.CreateServerResponse(clientSend);
  93. if (serverSend != null)
  94. socketClient.Send(serverSend);
  95. }
  96. catch (SocketException se) // 客户端断开连接
  97. {
  98. Debug.Print(se.Message);
  99. }
  100. finally
  101. {
  102. if (socketClient != null)
  103. socketClient.Close();
  104. }
  105. }
  106. #endregion
  107. }
  108. }