又大又粗又猛免费视频久久_国产理论在线播放_久久男人av资源网站免费软件_99国产精品无码

寫一個(gè)小型的,只有接收和發(fā)送消息的HTTP服務(wù)器

寫一個(gè)小型的,只有接收和發(fā)送消息的HTTP服務(wù)器

有時(shí)候我們要寫通信模塊,寫完之后總要測(cè)測(cè)通不通吧。我不知道別人是怎么做的,但是我自己覺得,要不寫個(gè)小型服務(wù)器(程序?),只能接收和發(fā)送消息就行了,于是就上網(wǎng)翻了下,好像并沒有現(xiàn)成的代碼(嘆氣),還是自己寫一個(gè)吧。

HTTP也是Tcp通信,上篇文章的Tcp服務(wù)器端其實(shí)拿過來用就行了,只是出了點(diǎn)小問題導(dǎo)致無法正常返回,所以寫下來記錄一下,希望以后更細(xì)心,別再犯類似錯(cuò)誤。

寫一個(gè)小型的,只有接收和發(fā)送消息的HTTP服務(wù)器

  1. using System;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Threading;
  7. using System.Text;
  8. namespace TestServer
  9. {
  10. public class MyHttpServer
  11. {
  12. string ip;
  13. int port;
  14. TcpListener listener;
  15. StreamWriter outStream;
  16. TcpClient remoteClient;
  17. NetworkStream ClientStream;
  18. public MyHttpServer(string inip,int inport)
  19. {
  20. ip = inip;
  21. port = inport;
  22. }
  23. public void listen()
  24. {
  25. listener = new TcpListener(IPAddress.Parse(ip),port);
  26. listener.Start();
  27. Console.WriteLine(“監(jiān)聽啟動(dòng)!”);
  28. byte[] buffer = new byte[1024];
  29. while (true)
  30. {
  31. try
  32. {
  33. remoteClient = listener.AcceptTcpClient();//阻塞
  34. Console.WriteLine(“有客戶端進(jìn)入!”);
  35. ClientStream = remoteClient.GetStream();
  36. int byteRead = ClientStream.Read(buffer, 0, 1024);
  37. if (byteRead == 0)
  38. {
  39. Console.WriteLine(“沒東西啊?。?#8221;);
  40. continue;
  41. }
  42. string msg = Encoding.UTF8.GetString(buffer, 0, byteRead);
  43. Console.WriteLine(“接收數(shù)據(jù):” msg);
  44. string head = “”;
  45. char [] charArray = Encoding.UTF8.GetChars(buffer);
  46. int i = 0;
  47. while(!charArray[i].Equals(‘ ‘))
  48. {
  49. head = charArray[i];
  50. i;
  51. }
  52. Console.WriteLine(head);
  53. switch (head)
  54. {
  55. case “POST”:
  56. {
  57. string msg2 = “這是POST方法”;
  58. byte[] buffer2 = Encoding.UTF8.GetBytes(msg2);//將字符串轉(zhuǎn)化為二進(jìn)制
  59. ClientStream.Write(buffer2, 0, buffer2.Length);//將轉(zhuǎn)換好的二進(jìn)制數(shù)據(jù)寫入流中并發(fā)送
  60. remoteClient.Close();//問題就出在這里,一定要關(guān)閉
  61. }
  62. break;
  63. case “GET”:
  64. {
  65. string msg2 = “這是GET方法”;
  66. byte[] buffer2 = Encoding.UTF8.GetBytes(msg2);
  67. ClientStream.Write(buffer2, 0, buffer2.Length);
  68. remoteClient.Close();//問題就出在這里,一定要關(guān)閉
  69. }
  70. break;
  71. }
  72. }
  73. catch (Exception ex)
  74. {
  75. Console.WriteLine(“異常:” ex.Message);
  76. break;
  77. }
  78. };
  79. }
  80. }
  81. class Program
  82. {
  83. static void Main(string[] args)
  84. {
  85. Console.WriteLine(“Hello World!”);
  86. Console.WriteLine(“—————————————“);
  87. MyHttpServer server = new MyHttpServer(“127.0.0.1”,8080);
  88. Thread thread = new Thread(new ThreadStart(server.listen));
  89. thread.Start();
  90. }
  91. }
  92. }

remoteClient.Close();就因?yàn)檫@里沒寫,客戶端發(fā)的消息能收到,但是一直得不到反饋,而客戶端打開的情況下,退出服務(wù)端,客戶端才會(huì)接受到反饋,當(dāng)然,是空的。

以后要多加注意,Tcp是連接性的通訊,服務(wù)端接受消息后如果不手動(dòng)關(guān)閉連接,系統(tǒng)默認(rèn)為連接并未斷開,也就不會(huì)將消息返回。

另外,話說我明明是做C 的,怎么貼的都是C#代碼,emmmmm…..

寫一個(gè)小型的,只有接收和發(fā)送消息的HTTP服務(wù)器

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
在線咨詢
分享本頁(yè)
返回頂部