我的TCP通信应用程序有一个非常奇怪的问题。 我很久以前就做到了,但从未遇到任何问题。 这是一个简单的通过TCP套接字发送和接收数据包。
但是我不知道如何,这周我在三星Galaxy S5上运行它,但是我没有成功建立与服务器的连接。
serverSocket.connect(new InetSocketAddress(mServerIPV6.getHostAddress(), Network.COMMUNICATION_PORT), (int) (3 * DateUtils.SECOND_IN_MILLIS));
总是返回:
java.net.SocketTimeoutException: failed to connect to /fe80::d6ae:5ff:fe43:c6e9%wlan0%23 (port 60001) after 3000ms
但是最疯狂的事情是它通过网络服务发现(UDP)成功找到了服务器的IP地址。因此,问题并非出自Wi-Fi网络,而是仅在此设备(三星S5)上发生。很奇怪。有想法吗?
答案 0 :(得分:0)
如果您使用的是较旧的设备,则可能需要启用TLS版本1.2。
您可以使用Okhttpclient构建器来完成此操作。
public static OkHttpClient.Builder enableTls12OnPreLollipop(OkHttpClient.Builder client) {
if (Build.VERSION.SDK_INT >= 16 && Build.VERSION.SDK_INT < 22) {
try {
SSLContext sc = SSLContext.getInstance("TLSv1.2");
sc.init(null, null, null);
client.sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()));
ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2)
.build();
List<ConnectionSpec> specs = new ArrayList<>();
specs.add(cs);
specs.add(ConnectionSpec.COMPATIBLE_TLS);
specs.add(ConnectionSpec.CLEARTEXT);
client.connectionSpecs(specs);
} catch (Exception exc) {
Log.e("OkHttpTLSCompat", "Error while setting TLS 1.2", exc);
}
}
return client;
}