我尝试与只有一个路径打开的主机执行套接字握手,但我一直收到以下错误:
java.net.UnknownHostException: example.com/tests/test1?id=abc
这是我的 Handshake.java 类:
import java.io.*;
import javax.net.ssl.*;
public class Handshake {
public static void main(String[] args) {
String host = "example.com/tests/test1?id=abc";
int port = 443;
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
try {
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
printSocketInfo(socket);
socket.startHandshake();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void printSocketInfo(SSLSocket socket) {
System.out.println("Socket class: " + socket.getClass());
System.out.println("Remote address = " + socket.getInetAddress().toString());
System.out.println("Remote port = " + socket.getPort());
System.out.println("Local socket address = " + socket.getLocalSocketAddress().toString());
System.out.println("Local address = " + socket.getLocalAddress().toString());
System.out.println("Local port = " + socket.getLocalPort());
System.out.println("Need client authentication = " + socket.getNeedClientAuth());
SSLSession ss = socket.getSession();
System.out.println("Cipher suite = " + ss.getCipherSuite());
System.out.println("Protocol = " + ss.getProtocol());
}
}
答案 0 :(得分:2)
java.net.UnknownHostException:example.com/tests/test1?id=abc
这不是SSL握手问题。这是一个主机名查找问题,它是由于您作为所谓的主机名提供的内容不属于此类这一事实。它是一个URL,包含查询。它可用作HTTP事务中的URL。对于Socket
来说,它是完全没有意义的。
重申一下,它与SSL或握手无关,因为堆栈跟踪应该已经告诉过你了。
答案 1 :(得分:1)
对我来说这似乎很自我解释,因为如果无法从域名确定主机的IP地址,则抛出UnknownHostException。如果您直接放置IP(假设您的域不是example.com ...),没有路径和查询字符串会发生什么?