2012-10-08 16 views
3

嘗試使用StreamSocket編寫簡單的代碼連接到IMAP服務器。它讀取服務器連接響應,但不會讀取任何其他內容。通過WinRT/C中的StreamSocket連接到IMAP#

private async void TCPTest(string hostName, string port) 
    { 
     status.Text = "start of TCPTest"; 

     StreamSocket socket = new StreamSocket(); 
     await socket.ConnectAsync(new HostName(hostName), port); 

     string senddata = "A001 login uuu ppp"; 

     status.Text += "\n first reading..."; 
     DataReader reader = new DataReader(socket.InputStream); 
     reader.InputStreamOptions = InputStreamOptions.Partial; 
     await reader.LoadAsync(1024); 
     string data = reader.ReadString(reader.UnconsumedBufferLength); 
     status.Text += "\n > read " + data; 

     status.Text += "\n writing..."; 
     writer = new DataWriter(socket.OutputStream); 
     writer.WriteString(senddata); 
     await writer.StoreAsync(); 
     status.Text += "\n > wrote " + sendata; 

     status.Text += "\n second reading..."; 
     writer = new DataWriter(socket.OutputStream); 
     await reader.LoadAsync(1024); 
     string data2 = reader.ReadString(reader.UnconsumedBufferLength); 
     status.Text += "\n >" + data2; 

     status.Text += "\n end of TCPTest"; 
    } 

這是我得到的輸出。

start of TCPTest 
first reading... 
> read * OK mydomain.com IMAP4rev1 MDaemon 13.0.1 ready 
writing... 
> wrote A001 login uuu ppp 
second reading... 

該應用程序從來沒有得到任何進一步的比這。沒有錯誤,它只是掛起。我在這裏做一些根本性的錯誤嗎?我的代碼是相同的(或多或少)作爲StreamSocket example on MSDN

+0

你需要確定你寫的東西是否完成閱讀。 如果沒有,這可能會掛起插座或看起來沒有任何事情做。但沒有錯誤 –

+0

我該怎麼做? while(reader.UnconsumedBufferLength> 0)或類似的東西? – roryok

+0

忘記終止命令。衛生署。 – roryok

回答

3

原來我沒有終止我的命令。最後添加Environment.Newline解決了問題。

+0

你能解釋發生了什麼嗎?你忘了在查詢結尾添加「\ r \ n」還是隻是「CRLF」? – imslavko

+0

我沒有將\ r \ n添加到查詢的末尾,因此未終止。我可以通過添加\ r \ n來修復它,但我使用了c#中的Environment.Newline屬性,它與添加\ r \ n相同。雖然我發現語法有點容易閱讀。 – roryok

+0

太棒了!有同樣的問題。這篇文章幫助了很多! – c0D3l0g1c