C#简单HTTP服务器未向浏览器发送响应

3
System.Net.Sockets.TcpListener server = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Loopback, 8080);
server.Start();
Console.WriteLine("Servidor TCP iniciado");
Console.WriteLine("Aguardando conexao de um cliente...");
TcpClient client = server.AcceptTcpClient();

Console.WriteLine("Um cliente conectou-se ao servidor");

System.IO.StreamWriter writer = new System.IO.StreamWriter(client.GetStream());
writer.Write("HTTP/1.0 200 OK\r\nContent-Type: text/plain; charset=UTF-8\r\n\r\nGoodbye, World!\r\n");
writer.Flush();


Console.WriteLine("Desligando servidor");
server.Stop();
Console.ReadKey();

当我打开浏览器并尝试访问URL http://localhost:8080 时,出现ERR_CONNECTION_RESET错误。我做错了什么?
1个回答

4
问题在于您有一个不正确的HTTP数据包,它没有包含Content-Length,因此浏览器不知道要读取什么内容。请尝试以下代码:
TcpListener server = new TcpListener(System.Net.IPAddress.Loopback, 8080);
server.Start();
Console.WriteLine("Wait for clients");
TcpClient client = server.AcceptTcpClient();

Console.WriteLine("Writing content");
string content = "Goodbye World!";

System.IO.StreamWriter writer = new System.IO.StreamWriter(client.GetStream());
writer.Write("HTTP/1.0 200 OK");
writer.Write(Environment.NewLine);
writer.Write("Content-Type: text/plain; charset=UTF-8");
writer.Write(Environment.NewLine);
writer.Write("Content-Length: "+ content.Length);
writer.Write(Environment.NewLine);
writer.Write(Environment.NewLine);
writer.Write(content);
writer.Flush();

Console.WriteLine("Disconnecting");
client.Close();
server.Stop();
Console.ReadKey();

你是对的。我的响应中确实没有Content-Length头部。不知道我怎么会错过它。谢谢@caesay。 - m_junior
但是为什么在Java中不指定HTTP头也能完美运行呢? - m_junior
@m_junior 很好,谢谢您!我在 PowerShell 脚本中创建一个简单监听器时遇到了一些获取有效 HTTP 响应的问题,而这个方法完美地解决了我的问题(只需进行一些小修改即可转换为 PowerShell)。 - PMental

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接