gpt4 book ai didi

Android Socket.io Websocket 传输不适用于 SSL

转载 作者:太空狗 更新时间:2023-10-29 12:47:46 26 4
gpt4 key购买 nike

我正在使用 gottox socket.io java client用于 Android 聊天应用程序。
我可以在 HTTP 模式下连接到 web-socket 和 Xhr 传输。但是当我切换到 HTTPS 时,只有 Xhr 模式在工作。我使用默认的 SSL 上下文,如下所示

SocketIO.setDefaultSSLSocketFactory(SSLContext.getInstance("Default"));

这在 Xhr 模式下工作正常。但是在 websocket 传输中没有响应或错误。

最佳答案

更新

可能是新版本 IO.setDefaultSSLContextIO。 setDefaultHostnameVerifier 方法不可用。相反,现在我们可以创建自己的 OkHttpClient 并在其上设置主机名验证器和 ssl 套接字工厂等,如 socket.io-client-java usage 中所述。 .这是那里的 fragment :

OkHttpClient okHttpClient = new OkHttpClient.Builder()
.hostnameVerifier(myHostnameVerifier)
.sslSocketFactory(mySSLContext.getSocketFactory(), myX509TrustManager)
.build(); // default settings for all sockets

IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
IO.setDefaultOkHttpCallFactory(okHttpClient);

初始答案:

我对 socket.ioio.socket:socket.io-client:0.7.0 版本有同样的问题。 Android 上的库已存在很长时间。它过去适用于 http 协议(protocol),但对于 https 协议(protocol),它在建立连接时遇到问题,出现 xhr 轮询错误

以下解决方案适用于我,无需修改库本身:

// Socket connection
private Socket mSocket;

// Configure options
IO.Options options = new IO.Options();
// ... add more options

// End point https
String yourEndpoint = "https://whatever.yoururl.com"
String yourHostName = "yoururl.com"

// If https, explicitly tell set the sslContext.
if (yourEndpoint.startsWith("https://")) {
try {
// Default settings for all sockets

// Set default ssl context
IO.setDefaultSSLContext(SSLContext.getDefault());

// Set default hostname
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
return hv.verify(yourHostName, session);
}
};
IO.setDefaultHostnameVerifier(hostnameVerifier);

// set as an option
options.sslContext = SSLContext.getDefault();
options.hostnameVerifier = hostnameVerifier;
options.secure = true;

} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}

// Instantiate the socket
mSocket = IO.socket(mEndpoint, options);

希望这对您有所帮助。

关于Android Socket.io Websocket 传输不适用于 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16183753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com