Networking 关于POP3消息终止八位字节的问题
这是来自POP3 RFC “对某些命令的响应是多行的。在这些情况下 在发送第一行 响应和CRLF,发送任何附加行,每个行终止 通过CRLF对。当所有响应行都已发送时 发送最后一行,由一个终止八位字节(十进制代码)组成 046,“.”和一个CRLF对。如果多行响应的任何一行 以终止八位字节开始,行由 将终止八位字节预挂起到响应的该行。 因此,多行响应以五个八位字节终止 “CRLF.CRLF”。当检查多行响应时,客户端检查 查看行是否以终止八位字节开始。如果是,如果是 除CRLF之外的其他八位字节紧随其后,该行的第一个八位字节 终止八位字节)被剥离。如果是,如果CRLF立即 后跟终止字符,然后是来自POP的响应 服务器结束,不考虑包含“.CRLF”的行 多行响应的一部分。” 嗯,我有这个问题,例如gmail有时发送终止八位组,然后在下一行发送CRLF对。例如:Networking 关于POP3消息终止八位字节的问题,networking,pop3,Networking,Pop3,这是来自POP3 RFC “对某些命令的响应是多行的。在这些情况下 在发送第一行 响应和CRLF,发送任何附加行,每个行终止 通过CRLF对。当所有响应行都已发送时 发送最后一行,由一个终止八位字节(十进制代码)组成 046,“.”和一个CRLF对。如果多行响应的任何一行 以终止八位字节开始,行由 将终止八位字节预挂起到响应的该行。 因此,多行响应以五个八位字节终止 “CRLF.CRLF”。当检查多行响应时,客户端检查 查看行是否以终止八位字节开始。如果是,如果是 除CRLF之外的其他八位字节紧
"+OK blah blah\r\n"
"blah blah.\r\n"
"\r\n"
这是非常罕见的,但有时会发生,因此在这种情况下,我显然无法确定消息的结尾,因为我希望有一行由“.”组成。\r\n。说真的,是Gmail违反了POP3协议还是我做错了什么?还有第二个问题,英语不是我的第一语言,所以我不能完全理解:
如果多行响应的任何一行以终止八位字节开始,则通过将终止八位字节预挂起到响应的该行,该行被“字节填充”。
因此,多行响应以五个八位字节“CRLF.CRLF”终止
什么时候使用CRLF.CRLF?有人能给我举个简单的例子吗?rfc表示,当响应的任何一行以终止八位字节开始时,都会使用该命令。但是在以CRLF.CRLF结尾的消息中,我没有看到任何以“.”开头的行。我查过了。也许我不明白什么,这就是为什么我要问 如果您发布用于读取套接字的代码,将非常有帮助。但我会尝试用这个例子来回答你问题的第二部分: 如果回答是:
hello world\r\n
we are doing fine\r\n
.500 is same as one-half\r\n
this is the last line\r\n
服务器必须以以下方式发送:
hello world\r\n
we are doing fine\r\n
..500 is same as one-half\r\n
this is the last line\r\n
.\r\n
因此,您可以看到它“字节填充”了一个额外的“.”,因此“.500”可以作为响应的一部分进行区分。最后五个八位字节也是“\r\n.\r\n”。这毫无意义。除非是由CR,LF对引起的,否则怎么会有“下一行”?我想问题一定出在你的读取套接字程序中。你在查伊根吗?我不知道你是什么意思。这些不是实际消息中的行,很明显,实际消息中的行以CRLF对终止并分隔,但我给出的示例由来自服务器的不同响应组成。当然,POP3 RFC说它们是用CRLF对终止的,但它们不是,至少Gmail没有这样做。