Java套接字编程异常

时间:2018-07-15 11:43:53

标签: java sockets exception whois

我正在接收Java套接字编程异常。这是《 Java完全参考Oracle》一书中的代码

import java.net.*;
import java.io.*;

public class Whois {
public static void main(String[] args)throws Exception{
    int c;

    Socket s = new Socket("whois.internic.net",43);

    InputStream in = s.getInputStream();
    OutputStream out = s.getOutputStream();

    String str = (args.length == 0 ? "OraclePressBooks.com" : args[0]) + "\n";
    byte buf[] = str.getBytes();


    out.write(buf);


    while((c=in.read())!=-1)
    {
        System.out.println((char)c);
    }
    s.close();
}
}

我正在跟踪异常。但是为什么呢?

Exception in thread "main" java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at Whois.main(Whois.java:8)

P.S。我正在使用Eclipse Photon。我尝试以“以管理员身份”运行Eclipse,并且也没有运行。

1 个答案:

答案 0 :(得分:0)

您没有与远程TCP端口43的网络连接。

但是,由于您已经写到由于使用“ WiFi”而拥有“正确的网络连接”,因此我们可能假设您至少具有Web访问权限(通过透明代理或直接连接)。

因此,您只需使用Whois Web服务即可访问Whois数据库。 一些注册服务商提供RWS-DNRD端点,这是用于域名注册数据(https://tools.ietf.org/id/draft-sheng-weirds-icann-rws-dnrd-01.html)的RESTful Web服务。您将找到许多RESTful客户端的示例,例如:https://www.javacodegeeks.com/2012/09/simple-rest-client-in-java.html

在您的情况下,您想访问Internic数据库,因此您可以使用GET请求(如Java 9)简单地查询其Web表单:

URL u = new URL("https://reports.internic.net/cgi/whois?whois_nic=OraclePressBooks.com&type=domain");
try (InputStream in = u.openStream()) {
    return new String(in.readAllBytes(), StandardCharsets.UTF_8);
}