我正在接收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,并且也没有运行。
答案 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);
}