0

WindowsPhoneでソケットを使用するためのmsdnチュートリアルを読みました。(http://msdn.microsoft.com/en-us/library/system.net.sockets.socket(v=VS.96).aspx)サーバーに接続するために到着しました。

これで、応答200(OK応答)=>を返します

HTTP/1.1 200 OK
Date: Mon, 16 Apr 2012 12:45:46 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny13 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
Last-Modified: Tue, 08 Aug 2006 14:12:09 GMT
ETag: "129a2e5-100000-41a822e23a040"
Accept-Ranges: byte

でも次に何をしたらいいのかわからない…

サーバーに接続し、ファイルをダウンロードするためにこれに「GETメッセージ」を送信しました

"GET /dwn/file.txt HTTP/1.1\r\nHost:myHost.com\r\n\r\n"

と応答後?私は何をしなければなりませんか?

チュートリアル、サンプル、または単なる説明をご存知の場合は、どうもありがとうございました。

これは私の関数=>

private void ProcessReceive(SocketAsyncEventArgs e)
    {
        if (e.SocketError == SocketError.Success)
        {

            response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
            response = response.Trim('\0');

           // show the response server value. 
            Debug.WriteLine(response.ToString());


            // Data has now been sent and received from the server. 
            // Disconnect from the server
            socket = e.UserToken as Socket;
            socket.Shutdown(SocketShutdown.Send);
            socket.Close();
            clientDone.Set();
        }
        else
        {
            // show error in the debugger.
            response = e.SocketError.ToString();
            Debug.WriteLine(response);
        }
    }
4

1 に答える 1

1

WebClientなどを使ってみませんか?

体験するだけの場合は、これは簡単な作業ではないことを知っておく必要があります。ここにいくつかのヒントがあります:

  • 1回の「Receive」呼び出しでHTTP応答ヘッダー全体と本文を受信することはおそらくないでしょう。TCPソケットはストリームであることを忘れないでください。
  • HTTPヘッダーは、UTF8ではなく7ビットASCIIでエンコードされます。
  • HTTPエンティティ(まあ、本体)のエンコーディングはヘッダーに依存しており、それをデコードするのは難しい場合があります。

楽しむ !

編集

明確化(ポイント#1):

        // Data has now been sent and received from the server. 
        // Disconnect from the server
        socket = e.UserToken as Socket;
        socket.Shutdown(SocketShutdown.Send);
        socket.Close();

なぜ今ソケットをシャットダウンして閉じるのですか?応答本文は、ストリームのヘッダーの後に続きます。私が言ったように、サーバーからの受信を待っているバイトはおそらくもっとあるでしょう。次のいずれかになるまで「受信」を呼び出し続けます。

  • 読み取るバイトはもうありません(ソケットはサーバーによって閉じられています)
  • 応答本文全体を読んだことを確認してください(「Content-Length」または「Transfer-Encoding」ヘッダーを参照)
于 2012-04-16T13:53:40.383 に答える