我正在尝试用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模式进行连接时,会发生同样的情况。
答案 0 :(得分:3)
最好是在测试这个东西,在本地安装IIS或Apache,然后使用地址127.0.0.1;它为您提供了更多的空间来测试不同的东西!
如果有人使用我的网站来测试他们对HTTP协议的实现,我会不喜欢它。
答案 1 :(得分:1)
如果您打算在“原始”级别进行游戏,那么您有责任了解那里的协议。请参阅Hypertext Transfer Protocol -- HTTP/1.1 。
否则,您应该坚持使用WebRequest和WebClient类。
答案 2 :(得分:-5)
我认为你需要使用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(<data>, <length>, 0);
}
希望它会有所帮助。