在 Windows Phone 中使用 Socket for Receive File

本文关键字:Socket for Receive File Windows Phone | 更新日期: 2023-09-27 18:31:27

我阅读了msdn教程,了解如何在Windows Phone上使用socket。(http://msdn.microsoft.com/en-us/library/system.net.sockets.socket(v=VS.96).aspx)我到达是为了将我连接到服务器。

这个,给我一个响应 200(确定响应)=>

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);
        }
    }

在 Windows Phone 中使用 Socket for Receive File

你为什么不使用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();

为什么现在关机和关掉插座?响应正文跟在流中的标头之后。正如我所说,可能有更多的字节等待从服务器接收。继续呼叫"接收",直到:

  • 没有更多的字节要读取(套接字被服务器关闭)
  • 您确定已阅读整个响应正文(请参阅"内容长度"或"传输编码"标头)