2009-08-18 102 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()例程,因为您可能希望使用一些代码。

相关问题