我正在使用 koush 提供的 GitHub 中的 AndroidAsync 库。 我需要这个库来创建 WebSocket 服务器,并且我能够创建它。
private static List<WebSocket> webSockets = new ArrayList<WebSocket>();
private static AsyncHttpServer httpServer = new AsyncHttpServer();
下面是实现:
public static void createWebSocket() {
httpServer.websocket("/", new AsyncHttpServer.WebSocketRequestCallback() {
@Override
public void onConnected(final WebSocket webSocket, AsyncHttpServerRequest request) {
webSockets.add(webSocket);
webSocket.setClosedCallback(new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
Log.d(TAG, "onCompleted");
}
});
webSocket.setStringCallback(new WebSocket.StringCallback() {
@Override
public void onStringAvailable(String s) {
Log.d(TAG, "onStringAvailable");
}
});
}
});
httpServer.listen(8080);
}
此实现完全正常工作。但是我想使用wss
协议,我可以在其中为websocket使用JKS(Java KeyStore)证书。
有什么办法可以做到这一点吗?如果不使用此库,还有其他我可以使用的库吗?任何例子将不胜感激。
谢谢!!
试试这个。我没用过。但是,它表示它支持Java服务器和Android客户端,并支持wss。祝你好运!
老实说,我不知道我是对的。我只是碰巧遇到这个。
你认为你可以用NanoHTTPD for java来做到这一点吗?
我想基本结构是:
MyHTTPDTask
import java.io.IOException;
import java.util.Map;
import fi.iki.elonen.NanoHTTPD;
class MyHTTPDTask extends AsyncTask {
private MyServer mHTTPD;
@Override
protected Object doInBackground(Object... params) {
mHTTPD = new MyServer();
mHTTPD.makeSecure(NanoHTTPD.makeSSLSocketFactory(R.string.keystore.jks, "password".toCharArray()), null);
}
}
我的服务器
import java.io.IOException;
import fi.iki.elonen.NanoHTTPD;
public class MyServer extends NanoHTTPD {
private final static int PORT = 8080;
public MyServer() throws IOException {
super(PORT);
start();
System.out.println( "nRunning! Point your browers to http://localhost:8080/ n" );
}
@Override
public Response serve(IHTTPSession session) {
String msg = "<html><body><h1>Hello server</h1>n";
msg += "<p>We serve " + session.getUri() + " !</p>";
return newFixedLengthResponse( msg + "</body></html>n" );
}
}
对于服务器端,为什么不使用标准 API,javax.websocket
?它是Java EE的一部分。
对于 Android 端,请参阅"在 Android 应用程序中使用哪个 WebSocket 库?"。