【发布时间】:2014-08-17 00:51:16
【问题描述】:
当我已经完成了一个使用普通 ServerSocket 的 Java 聊天程序时,我读到了 SSLSocket。 我正在尝试用 SSlSocket 替换普通的 ServerSocket,互联网上没有太多内容,但我发现了一些东西。 现在我的 WhServer 类看起来像这样: 此类是在选定端口中启动 Socket 的类,如果您需要查看其他类,我将编辑问题:
import java.io.IOException;
import java.net.*;
import javax.net.ServerSocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
public class WhServer extends Thread {
private int port;
private ServerSocket server;
private ChannelsManager manager;
SSLContext context;
SSLSocketFactory sslSf;
public WhServer(int port, ChannelsManager manager) throws IOException {
this.port = port;
this.manager = manager;
}
public void ServerStop() throws IOException{
server.close();
}
public WhServer(int port) throws IOException {
this(port, new ChannelsManager());
}
public int getPort() {
return port;
}
public void run() {
try {
while(true) {
ServerSocketFactory ssf = ServerSocketFactory.getDefault();
server = ssf.createServerSocket(port);
Socket socket = server.accept();
sslSf = context.getSocketFactory();
SSLSocket sslSocket = (SSLSocket) sslSf.createSocket(socket, null,socket.getPort(), false);
sslSocket.setUseClientMode(false);
manager.initialite(socket);
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
【问题讨论】:
-
看起来你的 SSLContext 还没有初始化,它只能为空(除非在这个类之外初始化)
-
不,不是。我的错误,但我该如何初始化它?我需要什么参数?我是套接字的初学者,所以如果你能给我看一个小代码示例,那将是完美的。 (SSLContextSpi, Provider, String) 这些参数是什么意思?
-
恐怕这不是我有任何经验的领域,但快速浏览 API 文档会发现一些静态 getInstance() 方法:docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLContext.html
-
所以我不需要那样初始化它?这是我采用的示例代码 (stackoverflow.com/questions/6559859/…)
-
互联网上关于这个的内容不多?摆脱它。 SO 和 Oracle Java 论坛充满了这方面的信息。