You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
3.1 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. public class TcpConn
  14. {
  15. public EndPoint Ep;
  16. public Socket socketClient;
  17. private IPEndPoint ipp;
  18. private Socket socket;
  19. private bool my_SocketExist = false;
  20. /// <summary>
  21. /// 判断服务器开关
  22. /// </summary>
  23. public bool SocketExist
  24. {
  25. get { return my_SocketExist; }
  26. private set { my_SocketExist = value; }
  27. }
  28. public void GetIPAddress(ComboBox cb)
  29. {
  30. cb.Items.Clear();
  31. foreach (IPAddress ipAddr in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
  32. {
  33. if (ipAddr.AddressFamily.ToString() == "InterNetwork")
  34. {
  35. cb.Items.Add(ipAddr.ToString());
  36. }
  37. }
  38. if (cb.FindString("127.0.0.1") == -1)
  39. cb.Items.Add("127.0.0.1");
  40. }
  41. /// <summary>
  42. /// 开服务器
  43. /// </summary>
  44. public void OpenServer(string ipAddr, int port)
  45. {
  46. ipp = new IPEndPoint(IPAddress.Parse(ipAddr), port);
  47. socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  48. socket.Bind(ipp);
  49. socket.Listen(0);
  50. SocketExist = true;
  51. }
  52. /// <summary>
  53. /// 关服务器
  54. /// </summary>
  55. public void CloseServer()
  56. {
  57. SocketExist = false;
  58. if (socketClient != null)
  59. socketClient.Close();
  60. if (socket != null)
  61. socket.Close();
  62. }
  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(DateTime.Now + " : " + se.Message);
  76. }
  77. }
  78. private int recvTimeOut = 2000;
  79. public int RecvTimeOut // 设置接收超时时间
  80. {
  81. get { return recvTimeOut; }
  82. set { recvTimeOut = value; }
  83. }
  84. const int recvLength = 65535;
  85. /// <summary>
  86. /// 接收数据
  87. /// </summary>
  88. public byte[] AcceptMsg()
  89. {
  90. byte[] clientSend = new byte[recvLength];
  91. try
  92. {
  93. socketClient.ReceiveTimeout = RecvTimeOut;
  94. socketClient.Receive(clientSend);
  95. return clientSend;
  96. }
  97. catch (Exception e) // 客户端断开连接
  98. {
  99. Debug.Print(DateTime.Now + " : " + e.Message);
  100. if (socketClient != null)
  101. socketClient.Close();
  102. return null;
  103. }
  104. }
  105. }
  106. }