0

你好。

例如,我有这个代码,它工作正常:

   class main {
           public static void main(String args[]) throws Exception {
        Socket socks = new Socket("whois.internic.net", 43);
    InputStream in = socks.getInputStream();
    OutputStream out = socks.getOutputStream();
    String str    ;
    str= "MHProfessional.com"+"\n";
    byte buf[] = str.getBytes();
    out.write(buf);

    int c;
    while ((c = in.read()) != -1) {
        System.out.print((char) c);
    }
    //socks.close();

但是当我删除这个时:+"\n"。然后我的程序 id 不工作,我看到空白屏幕。所以为什么?

4

1 回答 1

3

因为协议规范

WHOIS 服务器在 TCP 端口 43 上侦听来自 WHOIS 客户端的请求。WHOIS 客户端向 WHOIS 服务器发出文本请求,然后 WHOIS 服务器回复文本内容。所有请求都以 ASCII CR 结束,然后是 ASCII LF。

所以服务器在回复之前等待行尾。因此,如果您从不发送行尾,您将永远不会得到答案。

请注意,服务器甚至可能拒绝您的请求,因为您发送的是 LF,但之前没有发送 CR。请求应该是"MHProfessional.com\r\n".

于 2013-11-03T08:21:23.350 回答