【发布时间】:2015-05-28 05:51:02
【问题描述】:
我正在尝试使用应该支持 http 和 https 的 java 套接字创建简单的 web 服务器。但我一次只能实现一个。我需要同时支持 http @ port 80 和 https @ port 443 的逻辑。
这是使用 sslsocket 的 HTTPS 服务器的示例代码。我们可以使用简单的 ServerSocket 实现 HTTP Server。
public class HttpsServer {
public static void main(String[] args) {
try {
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream("/opt/p12file.p12"), "p12pass".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, "p12pass".toCharArray());
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), null, null);
SSLServerSocketFactory ssf = sc.getServerSocketFactory();
SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(8080);
while (true) {
SSLSocket c = (SSLSocket) s.accept();
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(c.getOutputStream()));
w.write("HTTP/1.0 200 OK");
w.newLine();
w.write("Content-Type: text/html");
w.newLine();
w.newLine();
w.write("<html><body><h1>Https Server Works</h1></body></html>");
w.newLine();
w.flush();
w.close();
c.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
谁能帮帮我吗?
【问题讨论】:
-
为什么不使用 Web 容器?你真的想自己实现http协议吗?
-
我正在尝试在 android 应用程序中实现这些功能。 @StevenPessall
-
一个用作HttpServer的android应用?老实说,这听起来像是一个混乱的系统设计。
-
它不是 android 中成熟的 HTTP 服务器。只是一个简单的后台服务,当从浏览器发布内容时,它使用套接字获取 httpresponse。我将http服务器(基于socket)和https服务器(基于sslsocket)分别实现为android应用程序。现在我想合并这些东西。谢谢。 @StevenPessall
标签: java sockets sslsocketfactory