Android 中的安全 WebSocket 服务器



我正在使用 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 库?"。

相关内容

  • 没有找到相关文章

最新更新