在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); }
希望它会有所帮助。