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.

105 lines
3.2 KiB

  1. using System;
  2. using System.Threading;
  3. using System.Windows.Forms;
  4. using StuMgmLib.MyNameSpace;
  5. using System.Diagnostics;
  6. namespace StuMgmServer
  7. {
  8. public partial class Server : Form
  9. {
  10. TcpConn tcpConn = new TcpConn();
  11. Thread tUpdateUi = null;
  12. private delegate void SetTextCallback(string text);
  13. public Server()
  14. {
  15. InitializeComponent();
  16. }
  17. private void 刷新IPToolStripMenuItem_Click(object sender, EventArgs e)
  18. {
  19. tcpConn.GetIPAddress(cbxIPAddr);
  20. }
  21. // 委托:更新界面
  22. private void setText(string text)
  23. {
  24. if (rtxHistory.InvokeRequired)
  25. {
  26. SetTextCallback method = new SetTextCallback(setText);
  27. Invoke(method, new object[] { text });
  28. }
  29. else
  30. {
  31. rtxHistory.Text = text + rtxHistory.Text;
  32. }
  33. }
  34. // 开启、关闭服务器
  35. private void btnSerSwitch_Click(object sender, EventArgs e)
  36. {
  37. bool sFlag = tcpConn.SocketExist;
  38. try
  39. {
  40. if (sFlag == true)
  41. {
  42. tcpConn.CloseServer();
  43. btnSerSwitch.Text = "开启服务器";
  44. }
  45. else if (sFlag != true)
  46. {
  47. int port = Convert.ToInt16(txtPort.Text);
  48. tcpConn.OpenServer(cbxIPAddr.Text, port);
  49. tUpdateUi = new Thread(updateHistory);
  50. tUpdateUi.Start();
  51. btnSerSwitch.Text = "关闭服务器";
  52. }
  53. }
  54. catch (Exception ep)
  55. {
  56. MessageBox.Show(ep.Message);
  57. }
  58. }
  59. // 线程:接收客户端连接,接收数据,数据处理;更新历史界面
  60. private void updateHistory()
  61. {
  62. while (tcpConn.SocketExist)
  63. {
  64. try
  65. {
  66. tcpConn.AcceptConn();
  67. setText(DateTime.Now.ToLongTimeString() + " : " + tcpConn.Ep.ToString() + " 建立连接 \n");
  68. byte[] serverSend = SystemCtrl.CreateServerResponse(tcpConn.AcceptMsg());
  69. if (serverSend != null)
  70. tcpConn.socketClient.Send(serverSend);
  71. tcpConn.socketClient.Close();
  72. setText(DateTime.Now.ToLongTimeString() + " : " + tcpConn.Ep.ToString() + " 断开连接 \n");
  73. }
  74. catch (Exception e)
  75. {
  76. Debug.Print(DateTime.Now + " : " + e.Message);
  77. }
  78. }
  79. }
  80. private void Server_Load(object sender, EventArgs e)
  81. {
  82. tcpConn.GetIPAddress(cbxIPAddr);
  83. }
  84. private void Server_FormClosing(object sender, FormClosingEventArgs e)
  85. {
  86. DialogResult dr = MessageBox.Show("确认退出程序?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  87. if (dr != DialogResult.Yes)
  88. e.Cancel = true;
  89. else
  90. {
  91. if (tUpdateUi != null)
  92. tUpdateUi.Abort();
  93. }
  94. }
  95. }
  96. }