我的程序如何知道服务器何时完成处理我的请求?

时间:2009-08-18 22:02:18

标签: c# .net asp.net vb.net

我使用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行,有时它会包含数千行。有没有办法让我能够完整地从服务器获得响应?我的意思是,似乎我必须知道服务器何时完成处理我的请求,但我不知道如何完成此任务。

所以重申我的问题是:我如何检查我的程序以查看服务器何时完成处理响应?

3 个答案:

答案 0 :(得分: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”(内存流?字符串?列表< byte>?符合您的要求)将保留完整的响应。

答案 1 :(得分:0)

为什么不检查未读邮件计数?如果没有未读邮件,则所有邮件都被标记为未读:)

答案 2 :(得分:0)

这个article有一个有趣的C#代码示例,它通过TCP与服务器进行通信。它显示了如何使用While循环等待服务器通过线路发送所有数据。

专注于HandleClientComm()例程,因为您可能希望使用这些代码。