我使用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行,有时它会包含数千行。有没有办法让我能够完整地从服务器获得响应?我的意思是,似乎我必须知道服务器何时完成处理我的请求,但我不知道如何完成此任务。
所以重申我的问题是:我如何检查我的程序以查看服务器何时完成处理响应?
答案 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()例程,因为您可能希望使用这些代码。