Android中的安全WebSocket服务器

时间:2016-03-14 19:34:03

标签: java 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协议,我可以使用JKS(Java KeyStore)证书作为websocket。

有没有办法做到这一点?如果没有这个库,我还可以使用其他库吗?任何一个例子都会非常感激。

谢谢!

3 个答案:

答案 0 :(得分:0)

尝试this一个。我没用过它。但是,它表示它支持支持wss的Java服务器和Android客户端。祝你好运!

答案 1 :(得分:0)

老实说,我不知道我是对的。我刚碰到这个。

你觉得你可以用NanoHTTPD为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);
    }
}

MyServer的

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" );
    }
}

答案 2 :(得分:0)

对于服务器端,为什么不使用标准API javax.websocket?它是Java EE的一部分。

对于Android方面,请参阅“Which WebSocket library to use in Android app?”。