2

我正在尝试实现 nntp 服务器。但看起来我的多线响应有问题。当我发送响应客户端关闭连接时。我使用 Thunderbird 和 SeaMonkey 作为客户端。

我听取了帮助以了解我的回答有什么问题。谢谢。

[S] server
[C] client


[S] 200NNTP Service Ready,posting permitted.

[C] MODE READER
[S] 200 Posting allowed

[C] GROUP group1
[S] 221 1 10100 10100

[C] XOVER 10100-10100
[S] 224
[S] 10100
[S] Subject 2104406756
[S] User0 <user0@xxx.com>
[S] Tue Jan 28 11:32:44FET 2014
[S] <10100@xxx.com>
[S] .

[C] HEAD 10100
[S] 221 10100 <10100@xxx.com>
[S] Path: news.foo.bar!not-for-mail
[S] From: User0<user0@xxx.com>
[S] Newsgroups: group1
[S] Subject: Subject 2104406756
[S] Date: Tue Jan 28 11:32:44FET 2014
[S] Message-ID: <10100@xxx.com>
[S] .

更新1:

我在 Thunderbird 中安装了用于调试客户端流量的插件(TBTracer),看起来客户端无法理解我的多行响应。客户只收到响应的第一部分。例如 XOVER 的响应是多行的。

[NNTP] [13:54:29] 200 NNTP 服务就绪,允许发布。

[NNTP] [13:54:29] 模式阅读器

[NNTP] [13:54:30] 200 允许发布

[NNTP] [13:54:30] 组组 1

[NNTP] [13:54:31] 221 1 10100 10100

[NNTP] [13:54:31] XOVER 10100-10100

[NNTP] [13:55:15] 224

[NNTP] [13:55:15] 退出

根据RFC 3977

3.1.1。多行数据块

  1. 该块由零个或多个“行”的序列组成,每个“行”都是以 CRLF 对结尾的八位字节流。除了那些行尾,流不得包括八位位组 NUL、LF 或 CR。

我尝试发送不同类型的线路但没有任何成功。例如:

String r = "224\r\n10100\r\n6 Oct 2000 04:38:40\r\n<10100@xxx.com>\r\n.\r\n";
4

1 回答 1

3

答案很简单。RFC 2980

每行输出都将使用文章编号进行格式化,
后跟概述数据库中的每个标题或
文章本身(当数据在概述数据库中不可用时
),由制表符分隔。

如果不存在数据,则必须提供一个空字段(即输出将有两个相邻的制表符)。

例子:111\tSubject\tUser\tDate\t111\t\t

于 2014-02-05T10:03:19.053 回答