在C#中编写“原始”HTTP客户端

我正在尝试用C#编写一个“原始”HTTP客户端。 你可能会问为什么?

我的目标是在J2ME中实现HTTP客户端(它只能执行GET和有限的POST),但首先我需要更好地理解HTTP协议(因此C#尝试)。

我的第一次尝试失败了:

var requestBytes = Encoding.UTF8.GetBytes(@"GET / HTTP/1.1 User-Agent: CSharp Host: www.google.com "); var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect("www.google.com", 80); socket.Send(requestBytes); var responseBytes = new byte[socket.ReceiveBufferSize]; socket.Receive(responseBytes); Console.Out.Write(Encoding.UTF8.GetString(responseBytes)); 

套接字打开,但随后在接收呼叫时阻塞。 几秒钟后,远程主机关闭连接。

有任何想法吗?

当我尝试使用puTTY中的RAW模式进行连接时,会发生同样的情况。

如果你正在测试这个东西,在本地安装IIS或Apache然后使用地址127.0.0.1,那可能是最好的。 它为您提供了更多的空间来测试不同的东西!

如果有人使用我的网站测试他们的HTTP协议实现,我会不喜欢它。

如果您打算在“原始”级别进行游戏,那么您有责任了解那里的协议。 请参阅超文本传输​​协议 – HTTP / 1.1 。

否则,您应该坚持使用WebRequest和WebClient类。

我认为你需要使用TcpListener类。

 // Begin listening for incoming connection requests TcpListener myListener = new TcpListener("localhost", 8080); // change to yours myListener.Start(); 

然后

 Socket mySocket = myListener.AcceptSocket(); if (mySocket.Connected) { // do some work mySocket.Send(, , 0); } 

希望它会有所帮助。