沐鸣娱乐


        写一个小型的,只有接收和发送消息的HTTP服务器

        写一个小型的,只有接收和发送消息的HTTP服务器

        有时候我们要写通信模块 ,写完之后总要测测通不通吧 。我不知道别人是怎么做的,但是我自己觉得,要不写个小型服务器(程序?) ,只能接收和发送消息就行了,于是就上网翻了下,好像并没有现成的代码(叹气),还是自己写一个吧。

        HTTP也是Tcp通信 ,上篇文章的Tcp服务器端其实拿过来用就行了,只是出了点小问题导致无法正常返回,所以写下来记录一下,希望以后更细心 ,别再犯类似错误 。

        写一个小型的,只有接收和发送消息的HTTP服务器

        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(ipadsdress.Parse(ip),port);
        26. listener.Start();
        27. Console.WriteLine(“监听启动!”);
        28. byte[] buffer = new byte[1024];
        29. while (true)
        30. {
        31. try
        32. {
        33. remoteClient = listener.AcceptTcpClient();//阻塞
        34. Console.WriteLine(“有客户端进入!”);
        35. ClientStream = remoteClient.GetStream();
        36. int byteRead = ClientStream.Read(buffer, 0, 1024);
        37. if (byteRead == 0)
        38. {
        39. Console.WriteLine(“没东西啊!!”);
        40. continue;
        41. }
        42. string msg = Encoding.UTF8.GetString(buffer, 0, byteRead);
        43. Console.WriteLine(“接收数据:” 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);//将字符串转化为二进制
        59. ClientStream.Write(buffer2, 0, buffer2.Length);//将转换好的二进制数据写入流中并发送
        60. remoteClient.Close();//问题就出在这里 ,一定要关闭
        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();//问题就出在这里,一定要关闭
        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();就因为这里没写 ,客户端发的消息能收到,但是一直得不到反馈,而客户端打开的情况下,退出服务端 ,客户端才会接受到反馈,当然 ,是空的 。

        以后要多加注意 ,Tcp是连接性的通讯 ,服务端接受消息后如果不手动关闭连接 ,系统默认为连接并未断开 ,也就不会将消息返回 。

        另外 ,话说我明明是做C 的,怎么贴的都是C#代码,emmmmm…..

        写一个小型的,只有接收和发送消息的HTTP服务器

        相关新闻

        联系我们
        联系我们
        分享本页
        返回顶部

          XML地图