Welcome

首页 / 软件开发 / C++ / 如何和Whois++网连接查询

如何和Whois++网连接查询2009-12-16在Whois++结构中,由客户负责进行网状漫游,因为每个主机仅通知客户与它相邻的主机是什么,这个协议倒不是复杂,客户打开到一台服务器的连接,发送查询请求,接收应答,关闭连接。客户在接收到应答后进行分析,然后决定下一个联系哪一台主机。这样使得客户必须有一种算法使得客户查询的主机没有重复的,而且能够尽快找到要找的主机。

每个Whois++客户应该被配置为自动和一个特定的Whois++服务器联系。这个默认的服务器可能有这样那样的要求,但是最基本的要求就是最好是本地服务器。

在接收到服务器的应答后,如果命中数大于0,则把结果返回用户。如果客户被要求和一个或多个服务器进行通信,客户要能够知道这些服务器指针是什么。

查询的方法有两种一种是扩充查询,一种是使用服务器目录。如果命中数为0,或用户希望扩展查询,客户机应该进行扩展查询,它只需要向服务器发送下面两种消息即可:"polled-by"或"polled-for",客户可以向新指定的主机进行扩充查询。

客户必须保留查询过的服务器,不要查询过的服务器再查询一次。

3.1.1. 优化网络

如果A希望经常使用B的WHOIS++服务器,A会希望通过创建一个本地索引服务器将B的服务器成为本地可用的。当A的客户通过扩充查询希望查询B时,解析的速度就会快得多。

Whois++网络已经不是一个树了,B和F之间已经建立了直接通道。这样查询的速度就快得多了,不用在查询完B后查询A,再查询C,最后再查询F。因为B和F已经建立了联结,所以,当客户只需要查询其中之一的数据时需要指时要的是哪一个,不然会返回B和F结点的内容。在客户方还可以使用黑名单方法将查询中的一些服务器屏蔽掉,因为访问这些服务器代价太大或其它原因不愿意让用户访问这些服务器。

3.1.2. 客户使用的算法

Query := 需要查询的数据;
QueriedServers := {};
AnswerList := {};
OriginalServers := { 客户所知的服务器 };
while OriginalServers非空 do:
ServerList = OriginalServers;
while ServerList非空 do:
Server := ServerList[1];
if Server未包括在QueriedServers中 then do:
send Query to Server;
Answer := 从Server返回的响应;
将ServersToAsk附加到ServerList;
将Server从ServerList删除;
将Answers附加到AnswerList;
end;
done;
if 应该扩充查询 then do:
ServerList := OriginalServers;
OriginalServers := {};
while ServerList非空 do:
Server := ServerList[1];
发送Polled-For-Query到Server;
Answer := 从Server返回的响应;
将Answer附加到OriginalServers;
将Server从ServerList删除;
end;
done;
done;

显示AnswerList;