POP3协议服务器的应答时间很长为什么?
在用rust写一个简单的POP3客户端,测试用的是126/163邮箱(qq邮箱貌似必须用SSL),但是在一开始就出问题了:无论向服务器发送user xxx@126.com
还是其他格式不正确的请求,都需要经过很长的时间(120s/150s)才能得到应答;并且后续再发送请求时就没有应答了。
代码如下:
let mut connection = TcpStream::connect(("pop.126.com", 110)).unwrap();
connection.write(b"user 114514@126.com\r\n");
let mut result = String::new();
connection.read_to_string(&mut result);
println!("{:?}", result);
测量read_to_string的运行时间如下:
当发送不正确请求时,为150s
当发送上文代码块中请求时,为120s
请问在这个过程中,是POP3服务器本身有什么约定,还是我对tcpstream的使用方式出了问题呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解决以后自问自答一发,read_to_string和io里其他不使用缓冲区的read方法都差不多,只能以EOF为结束符,而连接关闭的时候才有EOF,中间的信息都是用rn作为分隔的,因此连接成功时的信息(+OK Welcome...)和noop/user命令的应答(+OK core mail/+ERR Command...)就连在一起,只有连接因为超时关闭时才能成功读出来。
要想使用rn进行分隔可以用BufReader读。为什么不直接在std::net里放一个read_line一类的方法呢?