我创建了一个httplistener。所以我需要客户端发送数据来读取它们。问题是我不知道客户端应该如何发送数据
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://192.168.1.26:8282/");
listener.Prefixes.Add("http://localhost:8282/");
listener.Prefixes.Add("http://127.0.0.1:8282/");
listener.Start();
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
for (;;)
{
Console.WriteLine("Listening...");
// Note: The GetContext method blocks while waiting for a request.
HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;
string text;
using (var reader = new StreamReader(request.InputStream,
request.ContentEncoding))
{
text = reader.ReadToEnd();
MessageBox.Show(text);
}
// Obtain a response object.
HttpListenerResponse response = context.Response;
// Construct a response.
string responseString = "HelloWorld";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
// Get a response stream and write the response to it.
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
// You must close the output stream.
output.Close();
}
}).Start();
}
所以从客户端发送此命令:
GET / 192.168.1.26:8282 HTTP/1.0
但是我收到了这条消息
Recv 34 bytes
SEND OK
+IPD,1,518:HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Wed, 13 Jun 2018 13:16:03 GMT
Connection: close
Content-Length: 339
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Header</h2>
<hr><p>HTTP Error 400. The request has an invalid header name.</p>
</BODY></HTML>
1,CLOSED
我无法理解错误。同样在我的代码中,我设置每次请求发生时都会收到一个消息框。但它永远不会运行
答案 0 :(得分:1)
您没有尝试正确调用服务。这是您的客户请求:
GET / 192.168.1.26:8282 HTTP/1.0
您应该做的是首先通过端口8282建立到主机192.168.1.26的套接字连接。然后您必须以有效格式发出HTTP请求:
GET / HTTP/1.0
请勿忘记在请求后添加一些换行符(即:\ r \ n \ r \ n)。然后您的Web服务器应该响应HTTP请求。
Telnet中的快速示例:
telnet 192.168.1.26 8282
GET / HTTP/1.0
netcat的快速示例:
nc 192.168.1.26 8282
GET / HTTP/1.0
请注意,这些简单示例仅用于帮助您确保Web服务可以正常访问和运行。理想情况下,您可能会使用更强大的HTTP客户端,该客户端可根据您的特定需求进行定制。这个过程仍然是一样的:
以有效格式发出HTTP请求:(HTTP_VERB PATH HTTP_VERSION)
*)也许请查看所选浏览器中的开发人员工具(F12 - &gt;网络),了解如何发送HTTP标头。
以一种有意义的方式解析响应。
“同样在我的代码中,每次请求发生时我都会设置一个消息框。” - 您应该尝试在消息框中输入手动消息,而不是从输入流中读取。这是一个很好的调试技术。在HTTP GET请求中,除了以可选查询字符串参数的形式外,您通常不会发送数据。我有一种感觉,你没有得到你期望的结果,因为你正在阅读那些不存在的输入。在从流输入读取之前,首先确保连接成功。