使用SslStream读取方法挂起C#

时间:2013-11-01 15:18:20

标签: c# .net sslstream

我正在尝试使用SslStream从服务器读取响应。该服务器是Google IMAP,我根据谷歌文档使用IMAP命令。

第一次,当我使用AuthenticateAsClient方法时,这是有效的,我可以从服务器读取响应没有问题:

SslStream.Read(responseStreamBuffer, 0, responseStreamBuffer.Length);

但是,当我尝试再次使用相同的Read方法时,我收到此错误: 无法从传输连接中读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机无法响应而导致连接失败。

其余代码完美无缺,但在第一次从流中读取后,代码将会挂起。我有一个catch结构用于处理异常,这是我从中得到确切错误的地方。

本质上,服务器使用SslStream.Write方法获取我发送的命令,但之后对Read方法的每次调用都被上述异常拒绝。

我会很高兴能得到任何帮助。

此致 谢伊罗森菲尔德。

1 个答案:

答案 0 :(得分:3)

好的,所以我决定挖一点,在盒子外思考。我知道我的代码应该没问题,因为唯一的问题是第二次阅读。

所以我虽然问题可能不是C#,而是使用IMAP协议(或者至少是我处理它的方式)。据我所知,如果你使用Write方法,你应该在使用amy类型的NetworkStream时使用Read方法。由于SslStream只有Read和Write,没有ReadLine或Writeline方法,所以我被其他人困住了,没问题。

然后我看到了一个关于POP3协议类似主题的问题。当我发送命令时,我正在发送命令本身,例如tag login user pass。但是,我不知道,命令是成功发送的,只是服务器不是命令的结束。显然,问题不在于IAMP协议(比我更聪明的人发明的那个),这是我的命令,而不是我的代码。即,我必须在命令的末尾加上“\ r \ n”,告诉服务器这是命令的结束,tag LOGIN user pass\r\n。在那之后,它就像一个魅力。现在我只需构建一个类来处理我的应用程序的安全IMAP处理,就好了。

如果有兴趣,我将上传草稿代码(现在就是它),也可能是我完成时的库。我喜欢以自然形式使用C#,每次都会挑战我,所以这就是为什么我不总是使用外部库。当然,这并不总是可能的,但是当它成为现实时,我能感受到成功的成就,并使自己成为更好的程序员。

感谢所有观看我的问题并尝试提供帮助的人,感谢像你这样的人,我们可以继续编程,而不会脱掉头发。

万圣节快乐!

此致 谢伊罗森菲尔德。