ModeBusTCPServer.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Windows.Forms;
  7. namespace UAS_PLCDataReader
  8. {
  9. class ModeBusTCPServer
  10. {
  11. private bool isOpen = false;
  12. Thread threadWatch = null; //负责监听客户端的线程
  13. Socket socketWatch = null; //负责监听客户端的套接字
  14. Socket socConnection;
  15. public bool IsOpen
  16. {
  17. get
  18. {
  19. return isOpen;
  20. }
  21. set
  22. {
  23. isOpen = value;
  24. }
  25. }
  26. public string IP
  27. {
  28. get
  29. {
  30. return iP;
  31. }
  32. set
  33. {
  34. iP = value;
  35. }
  36. }
  37. public string Port
  38. {
  39. get
  40. {
  41. return port;
  42. }
  43. set
  44. {
  45. port = value;
  46. }
  47. }
  48. private string iP;
  49. private string port;
  50. RichTextAutoBottom richtext;
  51. public ModeBusTCPServer()
  52. {
  53. }
  54. public bool Open()
  55. {
  56. try
  57. {
  58. richtext = Application.OpenForms["MainWindow"].Controls["Result"] as RichTextAutoBottom;
  59. //定义一个套接字用于监听客户端发来的信息 包含3个参数(IP4寻址协议,流式连接,TCP协议)
  60. socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  61. //服务端发送信息 需要1个IP地址和端口号
  62. IPAddress ipaddress = IPAddress.Parse(iP);
  63. //将IP地址和端口号绑定到网络节点endpoint上
  64. IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(port));
  65. //监听绑定的网络节点
  66. socketWatch.Bind(endpoint);
  67. //将套接字的监听队列长度限制为20
  68. socketWatch.Listen(20);
  69. //创建一个监听线程
  70. threadWatch = new Thread(WatchConnecting);
  71. //将窗体线程设置为与后台同步
  72. threadWatch.IsBackground = true;
  73. //启动线程
  74. threadWatch.Start();
  75. isOpen = true;
  76. return true;
  77. }
  78. catch (Exception e)
  79. {
  80. MessageBox.Show(e.Message);
  81. return false;
  82. }
  83. }
  84. private void WatchConnecting()
  85. {
  86. socConnection = socketWatch.Accept();
  87. while (true) //持续不断监听客户端发来的请求
  88. {
  89. byte[] data = new byte[1024];
  90. socConnection.Receive(data);
  91. int length = data[5];
  92. byte[] datashow = new byte[length + 6];
  93. for (int i = 0; i <= length + 5; i++)
  94. {
  95. datashow[i] = data[i];
  96. }
  97. string str = Encoding.ASCII.GetString(datashow);
  98. richtext.AppendText(str + "\n");
  99. }
  100. }
  101. public void Close()
  102. {
  103. threadWatch.Abort();
  104. socketWatch.Close();
  105. isOpen = false;
  106. }
  107. public void SendOrder(string Code)
  108. {
  109. switch (Code)
  110. {
  111. default:
  112. break;
  113. }
  114. }
  115. }
  116. }