Form1.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. using DWZB_Agv_Agreement.Agv_Agreement;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Text.RegularExpressions;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. namespace DWZB_Agv_Agreement
  14. {
  15. public partial class Form1 : Form
  16. {
  17. public Form1()
  18. {
  19. InitializeComponent();
  20. }
  21. /// <summary>
  22. /// Socket服务端
  23. /// </summary>
  24. private readonly SocketServerHelper socketServerMd = new SocketServerHelper();
  25. /// <summary>
  26. /// 日志头部
  27. /// </summary>
  28. private readonly string LogHeadText = "设备实时运行Log界面 ==>> ";
  29. #region 日志显示
  30. private void ShowLogToFrmRichTextBox(object sender, ShowLogToFrmEventArgs e)
  31. {
  32. Invoke(new Action(() =>
  33. {
  34. richTextBox1.AppendText($"发生时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} | {e.ShowMsg}\r\n");
  35. }));
  36. }
  37. private void ShowLog(string msg, bool isShowLogToFrm, LogTypeEnum logTypeEnum)
  38. {
  39. if (isShowLogToFrm)
  40. {
  41. ShowLogToFrmRichTextBox(this, new ShowLogToFrmEventArgs(LogHeadText + msg));
  42. }
  43. LogHelper.WriteLog(LogHeadText + msg, logTypeEnum);
  44. }
  45. #endregion
  46. private void Button1_Click(object sender, EventArgs e)
  47. {
  48. try
  49. {
  50. socketServerMd.MessageEvent += new GetMessageEventHandler(Socket_MessageEvent);
  51. socketServerMd.AcceptEvent += new GetAcceptEventHandler(Socket_AcceptEvent);
  52. socketServerMd.CloseEvent += new GetCloseEventHandler(Socket_CloseEvent);
  53. //开启监听
  54. socketServerMd.StartListen(AppConfigHelper.Get("SocketServerIpAddress"), Convert.ToInt32(AppConfigHelper.Get("SocketServerPort")));
  55. socketServerMd.StartListenClientAccept();
  56. //Thread thCodeScanner = new Thread(socketServerMd.ListeneSocketClientConnectAccept)
  57. //{
  58. // IsBackground = true
  59. //};
  60. //thCodeScanner.Start();
  61. button1.Enabled = false;
  62. button12.Enabled = true;
  63. }
  64. catch (Exception ex)
  65. {
  66. MessageBox.Show(ex.Message);
  67. }
  68. }
  69. /// <summary>
  70. /// Socket连接关闭事件
  71. /// </summary>
  72. /// <param name="sender">数据</param>
  73. /// <param name="e">事件参数</param>
  74. void Socket_CloseEvent(object sender, EventArgs e)
  75. {
  76. string socketIpAddress = sender as string;
  77. Invoke(new Action(() =>
  78. {
  79. if (comboBox1.Items.Contains(socketIpAddress))
  80. {
  81. comboBox1.Items.Remove(socketIpAddress);
  82. }
  83. if (comboBox1.Items.Count == 0)
  84. {
  85. comboBox1.Text = "";
  86. }
  87. }));
  88. socketServerMd.RemoveSocketClient(socketIpAddress);
  89. ShowLog($"Socket客户端:【{socketIpAddress}】主动断开连接,Socket服务端已经移除该客户端连接!", true, LogTypeEnum.Run);
  90. }
  91. /// <summary>
  92. /// Socket获取远程连接节点事件
  93. /// </summary>
  94. /// <param name="sender">数据</param>
  95. /// <param name="e">事件参数</param>
  96. void Socket_AcceptEvent(object sender, EventArgs e)
  97. {
  98. string socketIpAddress = sender as string;
  99. ShowLog($"Socket客户端:【{socketIpAddress}】连接成功!", true, LogTypeEnum.Run);
  100. Invoke(new Action(() =>
  101. {
  102. if (!comboBox1.Items.Contains(socketIpAddress))
  103. {
  104. comboBox1.Items.Add(socketIpAddress);
  105. }
  106. }));
  107. }
  108. /// <summary>
  109. /// Socket接收消息数据事件
  110. /// </summary>
  111. /// <param name="sender">数据流</param>
  112. /// <param name="ip">ip地址</param>
  113. /// <param name="dataLength">数据长度</param>
  114. /// <param name="e">事件参数</param>
  115. void Socket_MessageEvent(object sender, string ip, int dataLength, EventArgs e)
  116. {
  117. try
  118. {
  119. byte[] by = sender as byte[];
  120. byte[] dataBtArr = new byte[dataLength];
  121. Array.Copy(by, 0, dataBtArr, 0, dataLength);
  122. if (DataHandleHelper.Verify_DataMsgCRC(dataBtArr))
  123. {
  124. if (DataHandleHelper.Verify_PackageHeadCRC(dataBtArr))
  125. {
  126. ShowLog($"接收到Socket客户端:【{ip}】的数据成功!:【{BitConverter.ToString(dataBtArr)}】", true, LogTypeEnum.SocketData);
  127. }
  128. else
  129. {
  130. ShowLog($"接收到Socket客户端:【{ip}】的数据的包头校验码验证不通过!【{BitConverter.ToString(dataBtArr)}】", true, LogTypeEnum.SocketErr);
  131. }
  132. }
  133. else
  134. {
  135. ShowLog($"接收到Socket客户端:【{ip}】的数据的数据校验码验证不通过!【{BitConverter.ToString(dataBtArr)}】", true, LogTypeEnum.SocketErr);
  136. }
  137. }
  138. catch (Exception ex)
  139. {
  140. ShowLog($"Socket客户端:【{ip}】接收数据发生异常:【{ex.Message}】!", true, LogTypeEnum.Err);
  141. }
  142. }
  143. private void button2_Click(object sender, EventArgs e)
  144. {
  145. short a = 29000;
  146. byte[] b = BitConverter.GetBytes(a);
  147. }
  148. private void button2_Click_1(object sender, EventArgs e)
  149. {
  150. try
  151. {
  152. Random rdm = new();
  153. int r = rdm.Next(1,65536);
  154. AgvTaskSendMd agvTaskSendMd = new()
  155. {
  156. FunctionCode = 0xF2,
  157. AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo")),
  158. CmdNo = r,
  159. CmdCode = 2,
  160. TaskType = 0x01,
  161. ClipAction = 0x01,
  162. MoveMode = 0x01,
  163. Target_X = (float)(rdm.Next(0, 180) + rdm.NextDouble()),
  164. Target_Y = (float)(rdm.Next(0, 180) + rdm.NextDouble()),
  165. Target_Angle = (float)(rdm.Next(0, 180) + rdm.NextDouble()),
  166. Speed = (float)(rdm.Next(0, 65536) + rdm.NextDouble()),
  167. Target_rfidNo = 1
  168. };
  169. byte[] btArrData = agvTaskSendMd.SerializeBytArr();
  170. byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
  171. Array.Reverse(dataLen);
  172. PackageHeadMd packageHeadMd = new();
  173. packageHeadMd.DataLen = dataLen;
  174. packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
  175. List<byte> headBtLst = new(8);
  176. headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
  177. headBtLst.AddRange(packageHeadMd.DataLen);
  178. headBtLst.Add(packageHeadMd.VersionNo);
  179. headBtLst.Add(packageHeadMd.Data_CRC);
  180. packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
  181. byte[] btArrHead = packageHeadMd.SerializeBytArr();
  182. byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
  183. sendBtArr = btArrHead.Concat(btArrData).ToArray();
  184. if (!string.IsNullOrEmpty(comboBox1.Text))
  185. {
  186. if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
  187. {
  188. socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
  189. ShowLog($"发送任务下发测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvTaskSendMd)}】", true, LogTypeEnum.SocketData);
  190. }
  191. else
  192. {
  193. MessageBox.Show("请选择要发送数据的Socket客户端!");
  194. }
  195. }
  196. else
  197. {
  198. MessageBox.Show("请选择要发送数据的Socket客户端!");
  199. }
  200. }
  201. catch (Exception ex)
  202. {
  203. MessageBox.Show(ex.Message);
  204. }
  205. }
  206. private void button4_Click(object sender, EventArgs e)
  207. {
  208. try
  209. {
  210. int r = new Random().Next(1, 65536);
  211. AgvChangeRunStatusCmdMd agvChangeRunStatusCmdMd = new();
  212. agvChangeRunStatusCmdMd.FunctionCode = 0xF2;
  213. agvChangeRunStatusCmdMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
  214. agvChangeRunStatusCmdMd.CmdNo = r;
  215. agvChangeRunStatusCmdMd.CmdCode = 0x01;
  216. agvChangeRunStatusCmdMd.StatusCode = 0x05;
  217. byte[] btArrData = agvChangeRunStatusCmdMd.SerializeBytArr();
  218. byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
  219. Array.Reverse(dataLen);
  220. PackageHeadMd packageHeadMd = new();
  221. packageHeadMd.DataLen = dataLen;
  222. packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
  223. List<byte> headBtLst = new(8);
  224. headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
  225. headBtLst.AddRange(packageHeadMd.DataLen);
  226. headBtLst.Add(packageHeadMd.VersionNo);
  227. headBtLst.Add(packageHeadMd.Data_CRC);
  228. packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
  229. byte[] btArrHead = packageHeadMd.SerializeBytArr();
  230. byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
  231. sendBtArr = btArrHead.Concat(btArrData).ToArray();
  232. if (!string.IsNullOrEmpty(comboBox1.Text))
  233. {
  234. if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
  235. {
  236. socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
  237. ShowLog($"发送任务状态更改测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvChangeRunStatusCmdMd)}】", true, LogTypeEnum.SocketData);
  238. }
  239. else
  240. {
  241. MessageBox.Show("请选择要发送数据的Socket客户端!");
  242. }
  243. }
  244. else
  245. {
  246. MessageBox.Show("请选择要发送数据的Socket客户端!");
  247. }
  248. }
  249. catch (Exception ex)
  250. {
  251. MessageBox.Show(ex.Message);
  252. }
  253. }
  254. private void button3_Click(object sender, EventArgs e)
  255. {
  256. try
  257. {
  258. AgvQueryStatusMd agvQueryStatusMd = new();
  259. int r = new Random().Next(1, 3000);
  260. agvQueryStatusMd.FunctionCode = 0xF1;
  261. agvQueryStatusMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
  262. agvQueryStatusMd.HeartbeatSignal = r;
  263. byte[] btArrData = agvQueryStatusMd.SerializeBytArr();
  264. byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
  265. Array.Reverse(dataLen);
  266. PackageHeadMd packageHeadMd = new();
  267. packageHeadMd.DataLen = dataLen;
  268. packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
  269. List<byte> headBtLst = new(8);
  270. headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
  271. headBtLst.AddRange(packageHeadMd.DataLen);
  272. headBtLst.Add(packageHeadMd.VersionNo);
  273. headBtLst.Add(packageHeadMd.Data_CRC);
  274. packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
  275. byte[] btArrHead = packageHeadMd.SerializeBytArr();
  276. byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
  277. sendBtArr = btArrHead.Concat(btArrData).ToArray();
  278. if (!string.IsNullOrEmpty(comboBox1.Text))
  279. {
  280. if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
  281. {
  282. socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
  283. ShowLog($"发送状态查询测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvQueryStatusMd)}】", true, LogTypeEnum.SocketData);
  284. }
  285. else
  286. {
  287. MessageBox.Show("请选择要发送数据的Socket客户端!");
  288. }
  289. }
  290. else
  291. {
  292. MessageBox.Show("请选择要发送数据的Socket客户端!");
  293. }
  294. }
  295. catch (Exception ex)
  296. {
  297. MessageBox.Show(ex.Message);
  298. }
  299. }
  300. private void button7_Click(object sender, EventArgs e)
  301. {
  302. try
  303. {
  304. int r = new Random().Next(1, 65536);
  305. AgvPreventBumpCmdMd agvPreventBumpCmdMd = new();
  306. agvPreventBumpCmdMd.FunctionCode = 0xF2;
  307. agvPreventBumpCmdMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
  308. agvPreventBumpCmdMd.CmdNo = r;
  309. agvPreventBumpCmdMd.CmdCode = 0x10;
  310. agvPreventBumpCmdMd.StatusCode = 0x01;
  311. byte[] btArrData = agvPreventBumpCmdMd.SerializeBytArr();
  312. byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
  313. Array.Reverse(dataLen);
  314. PackageHeadMd packageHeadMd = new();
  315. packageHeadMd.DataLen = dataLen;
  316. packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
  317. List<byte> headBtLst = new(8);
  318. headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
  319. headBtLst.AddRange(packageHeadMd.DataLen);
  320. headBtLst.Add(packageHeadMd.VersionNo);
  321. headBtLst.Add(packageHeadMd.Data_CRC);
  322. packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
  323. byte[] btArrHead = packageHeadMd.SerializeBytArr();
  324. byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
  325. sendBtArr = btArrHead.Concat(btArrData).ToArray();
  326. if (!string.IsNullOrEmpty(comboBox1.Text))
  327. {
  328. if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
  329. {
  330. socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
  331. ShowLog($"发送防撞条屏蔽测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvPreventBumpCmdMd)}】", true, LogTypeEnum.SocketData);
  332. }
  333. else
  334. {
  335. MessageBox.Show("请选择要发送数据的Socket客户端!");
  336. }
  337. }
  338. else
  339. {
  340. MessageBox.Show("请选择要发送数据的Socket客户端!");
  341. }
  342. }
  343. catch (Exception ex)
  344. {
  345. MessageBox.Show(ex.Message);
  346. }
  347. }
  348. private void button5_Click(object sender, EventArgs e)
  349. {
  350. try
  351. {
  352. int r = new Random().Next(1, 65536);
  353. AgvResetCmdMd agvResetCmdMd = new();
  354. agvResetCmdMd.FunctionCode = 0xF2;
  355. agvResetCmdMd.CmdNo = r;
  356. agvResetCmdMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
  357. agvResetCmdMd.CmdCode = 0x07;
  358. byte[] btArrData = agvResetCmdMd.SerializeBytArr();
  359. byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
  360. Array.Reverse(dataLen);
  361. PackageHeadMd packageHeadMd = new();
  362. packageHeadMd.DataLen = dataLen;
  363. packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
  364. List<byte> headBtLst = new(8);
  365. headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
  366. headBtLst.AddRange(packageHeadMd.DataLen);
  367. headBtLst.Add(packageHeadMd.VersionNo);
  368. headBtLst.Add(packageHeadMd.Data_CRC);
  369. packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
  370. byte[] btArrHead = packageHeadMd.SerializeBytArr();
  371. byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
  372. sendBtArr = btArrHead.Concat(btArrData).ToArray();
  373. if (!string.IsNullOrEmpty(comboBox1.Text))
  374. {
  375. if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
  376. {
  377. socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
  378. ShowLog($"发送复位测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvResetCmdMd)}】", true, LogTypeEnum.SocketData);
  379. }
  380. else
  381. {
  382. MessageBox.Show("请选择要发送数据的Socket客户端!");
  383. }
  384. }
  385. else
  386. {
  387. MessageBox.Show("请选择要发送数据的Socket客户端!");
  388. }
  389. }
  390. catch (Exception ex)
  391. {
  392. MessageBox.Show(ex.Message);
  393. }
  394. }
  395. private void button6_Click(object sender, EventArgs e)
  396. {
  397. try
  398. {
  399. int r = new Random().Next(1, 65536);
  400. AgvStopCmdMd agvStopCmdMd = new();
  401. agvStopCmdMd.FunctionCode = 0xF2;
  402. agvStopCmdMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
  403. agvStopCmdMd.CmdNo = r;
  404. agvStopCmdMd.CmdCode = 0x08;
  405. byte[] btArrData = agvStopCmdMd.SerializeBytArr();
  406. byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
  407. Array.Reverse(dataLen);
  408. PackageHeadMd packageHeadMd = new();
  409. packageHeadMd.DataLen = dataLen;
  410. packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
  411. List<byte> headBtLst = new(8);
  412. headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
  413. headBtLst.AddRange(packageHeadMd.DataLen);
  414. headBtLst.Add(packageHeadMd.VersionNo);
  415. headBtLst.Add(packageHeadMd.Data_CRC);
  416. packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
  417. byte[] btArrHead = packageHeadMd.SerializeBytArr();
  418. byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
  419. sendBtArr = btArrHead.Concat(btArrData).ToArray();
  420. if (!string.IsNullOrEmpty(comboBox1.Text))
  421. {
  422. if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
  423. {
  424. socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
  425. ShowLog($"发送停止测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvStopCmdMd)}】", true, LogTypeEnum.SocketData);
  426. }
  427. else
  428. {
  429. MessageBox.Show("请选择要发送数据的Socket客户端!");
  430. }
  431. }
  432. else
  433. {
  434. MessageBox.Show("请选择要发送数据的Socket客户端!");
  435. }
  436. }
  437. catch (Exception ex)
  438. {
  439. MessageBox.Show(ex.Message);
  440. }
  441. }
  442. private void button8_Click(object sender, EventArgs e)
  443. {
  444. Random r = new();
  445. int a = r.Next(0,10000);
  446. byte[] b = BitConverter.GetBytes(a);
  447. if (!string.IsNullOrEmpty(comboBox1.Text))
  448. {
  449. if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
  450. {
  451. socketServerMd.SendData(comboBox1.SelectedItem.ToString(), b);
  452. ShowLog($"发送自定义测试数据成功:【{a}】【{BitConverter.ToString(b)}】", true, LogTypeEnum.SocketData);
  453. }
  454. else
  455. {
  456. MessageBox.Show("请选择要发送数据的Socket客户端!");
  457. }
  458. }
  459. else
  460. {
  461. MessageBox.Show("请选择要发送数据的Socket客户端!");
  462. }
  463. }
  464. private void button9_Click(object sender, EventArgs e)
  465. {
  466. richTextBox1.Clear();
  467. }
  468. private void button10_Click(object sender, EventArgs e)
  469. {
  470. AppConfigHelper.Update("AgvNo", Convert.ToInt32(numericUpDown1.Value).ToString());
  471. }
  472. private void Form1_Load(object sender, EventArgs e)
  473. {
  474. textBox1.Text = AppConfigHelper.Get("SocketServerIpAddress");
  475. numericUpDown2.Value = Convert.ToInt32(AppConfigHelper.Get("SocketServerPort"));
  476. numericUpDown1.Value = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
  477. }
  478. private void button11_Click(object sender, EventArgs e)
  479. {
  480. if (!IsIP(textBox1.Text))
  481. {
  482. MessageBox.Show("请输入正确的IP地址!");
  483. return;
  484. }
  485. if (AppConfigHelper.Get("SocketServerIpAddress") == textBox1.Text && Convert.ToInt32(numericUpDown2.Value) == Convert.ToInt32(AppConfigHelper.Get("SocketServerPort")))
  486. return;
  487. AppConfigHelper.Update("SocketServerIpAddress", textBox1.Text);
  488. AppConfigHelper.Update("SocketServerPort", Convert.ToInt32(numericUpDown2.Value).ToString());
  489. MessageBox.Show("更改IP地址和端口号后,需要重启程序才能生效!");
  490. }
  491. /// <summary>
  492. /// 验证IP地址是否合法
  493. /// </summary>
  494. /// <param name="ip">要验证的IP地址</param>
  495. public bool IsIP(string ip)
  496. {
  497. //如果为空,认为验证合格
  498. if (string.IsNullOrEmpty(ip))
  499. {
  500. return false;
  501. }
  502. //清除要验证字符串中的空格
  503. ip = ip.Trim();
  504. //模式字符串
  505. string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
  506. //验证
  507. return Regex.IsMatch(ip, pattern);
  508. }
  509. private void button12_Click(object sender, EventArgs e)
  510. {
  511. socketServerMd.CloseServer();
  512. socketServerMd.MessageEvent -= new GetMessageEventHandler(Socket_MessageEvent);
  513. socketServerMd.AcceptEvent -= new GetAcceptEventHandler(Socket_AcceptEvent);
  514. socketServerMd.CloseEvent -= new GetCloseEventHandler(Socket_CloseEvent);
  515. comboBox1.Items.Clear();
  516. comboBox1.Text = string.Empty;
  517. button12.Enabled = false;
  518. button1.Enabled = true;
  519. }
  520. }
  521. }