2

このコードを使用して、ローカルの http 要求サーバーとして機能する Windows サービスを記述します。

public void StartMe()
    {
        System.Net.IPAddress localAddr = System.Net.IPAddress.Parse("127.0.0.1");
        System.Net.Sockets.TcpListener server = new System.Net.Sockets.TcpListener(localAddr, 1234);
        server.Start();
        Byte[] bytes = new Byte[1024];
        String data = null;
        while (RunThread)
        {
            System.Net.Sockets.TcpClient client = server.AcceptTcpClient();
            data = null;
            System.Net.Sockets.NetworkStream stream = client.GetStream();
            stream.Read(bytes, 0, bytes.Length);
            data = System.Text.Encoding.ASCII.GetString(bytes);

            System.IO.StreamWriter sw = new System.IO.StreamWriter("c:\\MyLog.txt", true);
            sw.WriteLine(data);
            sw.Close();

            client.Close();
        }
    }

そして、私はこのコードにいくつかの問題があります: まずdata、ブラウザにこの URL を書き込んだ後、文字列でこのようなものが得られますhttp://127.0.0.1:1234/helloWorld

GET /helloWorld HTTP/1.1
Host: 127.0.0.1:1234
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
Accept-Encoding: gzip,deflate,sdch
Accept-Language: he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: windows-1255,utf-8;q=0.7,*;q=0.3

helloWorldそして、この例からのみを取得する方法を知りたいです。そして2番目の問題は、サーバーがブラウザに応答し、接続を閉じるだけでよいことです。

4

1 に答える 1

5

数日前に似たようなことを尋ねました。HTTPListener-Class をより適切に実装します。生活が楽になります。

この例を参照してください: http://msdn.microsoft.com/de-de/library/system.net.httplistener%28v=vs.85%29.aspx

HelloWorld は次のように取得されます。

HttpListenerContext context = listener.GetContext(); // Waits for incomming request
HttpListenerRequest request = context.Request;
string url = request.RawUrl; // This would contain "/helloworld"

複数のリクエストを待ちたい場合は、Asyncronos の方法を実装するか、次のようにします。

new Thread(() =>
{
    while(listener.IsListening)
    {
        handleRequest(listener.GetContext());
    }

});
...

void handleRequest(HttpListenerContext context) { // Do stuff here }

そのコードサンプルは私の頭から出てきました。うまく機能させるには、おそらく手探りが必要ですが、理解していただければ幸いです。

于 2013-04-10T17:49:06.240 に答える