今天,我正在研究套接字,我的目的是了解http如何处理二进制文件和多部分请求。从头开始,我从简单的套接字应用程序开始。我知道套接字和协议的工作方式,但只想自己构建一些东西。
我遵循了msdn上的这份文档:https://docs.microsoft.com/tr-tr/dotnet/api/system.net.sockets.tcplistener?view=netframework-4.8
有一行写着;
// Send back a response.
stream.Write(msg, 0, msg.Length);
起初我不明白这行。为什么我需要发送响应才能接收数据。如果那只是出于测试目的,我应该能够看到PostMan的回复,但是我没有。
要发送一些http标头,我尝试了此代码块;
byte[] msg = Encoding.ASCII.GetBytes("HTTP/1.1 200 OK");
// Send back a response.
stream.Write(msg, 0, msg.Length);
但是由于字符串,它不起作用。它只是失败,并且没有真正响应任何事情。 但是我没有输入“ HTTP / 1.1 200 OK”,而是输入了“ HTTP / 1.1a200 OK”。我的意思是删除空白并放入其他任何东西使其以某种方式起作用。我不知道为什么。
另一件事是从客户端接收字节,我使用了MemoryStream,并且下面的代码再次无法正常工作,原因:
NetworkStream stream = client.GetStream();
var ms = new MemoryStream();
stream.CopyTo(ms);
它只是不响应,也不会进入下一行。知道为什么。
谢谢。