C#으로 매우 간단한 웹 서버를 구축하려고합니다. 나는 HttpListener
을 사용했고, 지금까지 나는 그것을 가동시켜 달리고있다. 그러나 내가 InputStream
요청을하려고 할 때, 나는 GET
에 무엇을 넣든 항상 NullStream
을 만난다.C# : HttpListener request InputStream은 항상 빈 스트림입니다.
class WebServer
{
private HttpListener listener;
private bool firstRun = true;
private const string prefixes = "http://127.0.0.1:8080/";
public void Start()
{
if (firstRun)
{
listener = new HttpListener();
listener.Prefixes.Add(prefixes);
firstRun = false;
}
try
{
listener.Start();
}
catch (HttpListenerException hlex)
{
return;
}
while (listener.IsListening)
{
var context = listener.GetContext();
context.Request.InputStream.Position = 0;//i even tried to reset stream position
var body = new StreamReader(context.Request.InputStream).ReadToEnd();//this is always empty("")
byte[] b = Encoding.UTF8.GetBytes("ACK");
context.Response.StatusCode = 200;
context.Response.KeepAlive = false;
context.Response.ContentLength64 = b.Length;
var output = context.Response.OutputStream;
output.Write(b, 0, b.Length);
context.Response.Close();
Console.WriteLine(body);
}
listener.Stop();
listener.Close();
}
}
내가 브라우저를 열고 GET
요청을 생성하고,이 URL을 입력하려면 : 당신이 코드에서 볼 수 있듯이
http://127.0.0.1:8080/?samad=11
내가도 재설정하려고 여기
내 코드입니다 스트림 위치를 시작점으로 설정하지만 여전히 운이 없다.
브라우저에 위치하고 있습니다. 모든 데이터는 헤더에 있습니다. 일부 데이터를 수신하기 위해 HttpWebRequest 클래스를 사용하는 간단한 클라이언트를 작성할 수 있습니다. – CSharpie
@ CSharpie 귀하의 의견에 감사드립니다. 하지만 내가 원하는 것은 URL에 입력 된 데이터를받는 것입니다. 나는 클라이언트 프로그램을 갖고 싶지 않다. 나는 또한'context.Request.Headers'를 체크했는데'samad = 11' 데이터가 없었습니다. –
'samad = 11'이 헤더가 아닌 QueryString에 있습니다. –