在 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);
}
}
你为什么不使用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();
为什么现在关机和关掉插座?响应正文跟在流中的标头之后。正如我所说,可能有更多的字节等待从服务器接收。继续呼叫"接收",直到:
- 没有更多的字节要读取(套接字被服务器关闭)
- 您确定已阅读整个响应正文(请参阅"内容长度"或"传输编码"标头)