关于POP3消息终止八位字节的问题

时间:2010-06-08 17:37:42

标签: networking pop3

这是来自POP3 RFC。

“对某些命令的响应是多行的。在这些情况下,哪些    在发送第一行后,会在下面清楚地显示    响应和CRLF,发送任何其他行,每个终止    通过CRLF对。当响应的所有行都已发送时,a    最后一行被发送,包括一个终止八位字节(十进制代码    046,“。”)和CRLF对。如果是多行响应的任何行    从终止八位字节开始,该行被“字节填充”    预先终止八位字节到响应的那一行。    因此,多行响应以五个八位字节终止    “CRLF.CRLF”。检查多行响应时,客户端会检查    查看该行是否以终止八位字节开头。如果是,如果    除了CRLF之外的八位字节,该行的第一个八位字节(    终止八位字节被剥夺了。如果是这样,如果CRLF立即    跟随终止字符,然后是POP的响应    服务器已结束,并且不考虑包含“.CRLF”的行    多线响应的一部分。“

好吧,我有这个问题,例如gmail有时发送终止八位字节,然后在NEXT LINE发送CRLF对。例如:

"+OK blah blah\r\n"
"blah blah.\r\n"
"\r\n"

这是非常罕见的,但有时会发生,所以很明显我无法在这种情况下确定消息的结束,因为我期待一条由'。\ r \ n'组成的行。说真的,Gmail是否违反了POP3协议,或者我做错了什么?我还有第二个问题,英语不是我的第一语言所以我完全无法理解:

“如果多行响应的任何行以终止八位字节开始,则通过将终止八位字节预先挂起到响应的该行,该行被”字节填充“。    因此,多行响应以五个八位字节“CRLF.CRLF”终止。“

何时使用CRLF.CRLF?有人能给我一个简单的例子吗? rfc表示当响应的任何行以终止八位字节开始时使用。但我没有看到任何以'。'开头的行。在以CRLF.CRLF终止的消息中。我查了一下。也许我不明白什么,这就是我要问的原因。

1 个答案:

答案 0 :(得分:2)

如果您发布了用于读取套接字的代码,那将非常有用。但我会尝试用这个例子回答你问题的第二部分:

如果回复是:

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'。