2012-04-16 82 views
0

我閱讀msdn使用套接字與Windows手機教程。 (http://msdn.microsoft.com/en-us/library/system.net.sockets.socket(v=VS.96).aspx)我到達將我連接到服務器。使用套接字在Windows Phone中接收文件

這回我一個響應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 /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

你爲什麼不使用WebClient或類似的東西?

如果只是爲了體驗,你應該知道這不是一項簡單的任務。下面是一些提示:

  • 你可能不收到整個HTTP響應報頭+身在一個「接收」的號召。請記住,一個TCP套接字是一個流。
  • HTTP頭以7位ASCII編碼,而不是UTF8。
  • HTTP實體(well,body)編碼依賴於頭部,解碼可能會非常棘手。

玩得開心!

編輯

澄清(點#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(); 

你爲什麼關機,現在關閉套接字?響應正文在流中的頭部之後。正如我所說,可能有更多的字節等待從服務器收到。繼續呼籲「接受」,直到:

  • 沒有更多的字節讀取(套接字服務器關閉)
  • 你確信你已經閱讀了整個響應體(請參閱「內容長度「或」傳輸編碼「標頭)
+0

感謝您的迴應,但我使用不同的請求(發送服務器,響應服務器等)之間的接收時間套接字,我知道我沒有收到整個HTTP響應在一個「接收」調用中,而且,確切地說,你知道我需要發送服務器來發送一個與我想下載的文件對應的數據流嗎? – 2012-04-16 14:09:20

+0

我編輯了我的回覆 – 2012-04-16 15:17:07

+0

是的,非常感謝你,這是問題,我現在明白了!謝謝!! – 2012-04-17 11:32:42