在Windows Phone中使用Socket接收文件

时间:2012-04-16 13:33:35

标签: c# windows-phone-7

我阅读了使用Windows手机套接字的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);
        }
    }

1 个答案:

答案 0 :(得分:1)

为什么不使用WebClient或类似的东西?

如果只是为了体验,你应该知道这不是一项微不足道的任务。以下是一些提示:

  • 您可能会在一个"接收"中接收整个HTTP响应标头+正文。呼叫。请记住,TCP套接字是一个流。
  • HTTP标头以7位ASCII编码,而不是UTF8。
  • 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();

为什么现在关闭并关闭套接字?响应主体遵循流中的标头。正如我所说,等待从服务器接收的字节可能更多。继续致电"接收"直到:

  • 没有更多字节需要读取(套接字由服务器关闭)
  • 您确定已阅读整个回复正文(请参阅"内容长度"或"转码编码"标题)