2009-08-18 99 views
1

我使用IMAP和Telnet連接到我的郵件服務器。一旦我連接,我將收件箱中的所有項目標記爲已讀。有時收件箱中只會有幾封電子郵件,有時收件箱中可能會有數千封電子郵件。我將來自服務器的響應存儲到Byte數組中,但Byte數組的長度固定。我的程序如何知道服務器何時處理完我的請求?

Private client As New TcpClient("owa.company.com", 143) 
Private data As [Byte]() 
Private stream As NetworkStream = client.GetStream() 
. 
. some code here generates a response that I want to read 
. 
data = New [Byte](1024) {} 
bytes = stream.Read(data, 0, data.Length) 

但是,從服務器的響應變化的基礎上有多少電子郵件被成功標記爲已讀,因爲我得到確認每個處理的電子郵件的一條線。有些時候響應可能只包含10-20行,其他時候會包含數千行。我有什麼辦法可以從服務器獲得完整的響應嗎?我的意思是,似乎我不得不知道服務器何時處理完我的請求,但我不知道如何去完成此操作。

因此,重申我的問題是:如何檢查我的程序以查看服務器何時完成處理響應?

回答

1

我相信你可以使用的NetworkStream的DataAvailable財產:(???內存流串名單<字節>達到你的要求)

if(stream.CanRead) 
{ 
    do{ 
    bytes = stream.Read(data, 0, data.Length); 
    //append the data read to wherever you want to hold it. 
    someCollectionHoldingTheFullResponse.Add(data); 
    } while(stream.DataAvailable); 
} 

最後,「someCollectionHoldingTheFullResponse」將持有的全部響應。

0

爲什麼不只是檢查未讀的郵件數量?如果沒有未讀郵件,則全部標記爲未讀:)

0

article有一個有趣的C#代碼通過TCP與服務器進行通信的示例。它顯示瞭如何使用While循環等待服務器通過線路發送所有數據。

專注於HandleClientComm()例程,因爲您可能希望使用一些代碼。

相關問題