我正在尝试使用SslStream从服务器读取响应。该服务器是Google IMAP,我根据谷歌文档使用IMAP命令。
第一次,当我使用AuthenticateAsClient方法时,这是有效的,我可以从服务器读取响应没有问题:
SslStream.Read(responseStreamBuffer, 0, responseStreamBuffer.Length);
但是,当我尝试再次使用相同的Read方法时,我收到此错误: 无法从传输连接中读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机无法响应而导致连接失败。
其余代码完美无缺,但在第一次从流中读取后,代码将会挂起。我有一个catch
结构用于处理异常,这是我从中得到确切错误的地方。
本质上,服务器使用SslStream.Write
方法获取我发送的命令,但之后对Read方法的每次调用都被上述异常拒绝。
我会很高兴能得到任何帮助。
此致 谢伊罗森菲尔德。
答案 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#,每次都会挑战我,所以这就是为什么我不总是使用外部库。当然,这并不总是可能的,但是当它成为现实时,我能感受到成功的成就,并使自己成为更好的程序员。
感谢所有观看我的问题并尝试提供帮助的人,感谢像你这样的人,我们可以继续编程,而不会脱掉头发。
万圣节快乐!
此致 谢伊罗森菲尔德。