2

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

第一次,当我使用 AuthenticateAsClient 方法时,这是可行的,我可以毫无问题地读取服务器的响应:

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

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

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

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

如果我能得到任何帮助,我将不胜感激。

问候,谢伊·罗森菲尔德。

4

1 回答 1

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#,它每次都对我提出挑战,所以这就是我不总是使用外部库的原因。当然,这并不总是可能的,但当它成功时,我会感到成功,让自己成为一个更好的程序员。

感谢所有观看我的问题并试图提供帮助的人,感谢像你们这样的人,我们可以继续编程而无需费力。

祝大家万圣节快乐!

问候,谢伊·罗森菲尔德。

于 2013-11-02T00:29:21.957 回答