Hi想知道是否有办法设置套接字的超时,以及在连接握手之前重试的次数。我在非常糟糕的连接模式下测试了我的应用程序,我为我在Volley中的请求设置了重试策略为10秒,但SSL握手似乎是个问题,因为它有一个默认的超时设置为60秒,而Volley超时只被触发当套接字由于尝试次数或超时而失败时。
下面是我的方法:
private SSLSocketFactory newSslSocketFactory() {
try {
// Get an instance of the Bouncy Castle KeyStore format
KeyStore trusted = KeyStore.getInstance("BKS");
// Get the raw resource, which contains the keystore with
// your trusted certificates (root and any intermediate certs)
InputStream in = getApplicationContext().getResources().openRawResource(R.raw.muip);
try {
// Initialize the keystore with the provided trusted certificates
// Provide the password of the keystore
trusted.load(in, KEYSTORE_PASSWORD.toCharArray());
} finally {
in.close();
}
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(trusted);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory sf = new NoSSLv3Factory(context.getSocketFactory());
HttpsURLConnection.setDefaultSSLSocketFactory(sf);
return sf;
} catch (Throwable e) {
Log.e(TAG, "newSslSocketFactory: "+ e.getMessage(),e );
throw new AssertionError(e);
}
}
我正在使用截击来提出我的请求,我实现这一点的方法是:
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
Network network = new BasicNetwork(new HurlStack(null, newSslSocketFactory()));
Cache cache = new DiskBasedCache(getCacheDir(), 1024 * 1024); // 1MB cap
mRequestQueue = new RequestQueue(cache, network);
mRequestQueue.start();
}
return mRequestQueue;
}
我还尝试设置了这样的超时:
SSLSocketFactory sf = new NoSSLv3Factory(SSLCertificateSocketFactory.getDefault(10000, new SSLSessionCache(this)));
在mRequestQueue之后。start()
您可以通过以下方式设置超时:
int socketTimeout = 30000; // 30 seconds - change to what you want
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(policy);
queue.add(stringRequest);
问题内容: 如何创建SSL套接字连接? 我真的需要创建密钥库吗?该密钥库应该与我所有的客户端应用程序共享吗? 我用以下代码创建了一个服务器: 我用以下代码在android上创建了一个客户端: 但是当我尝试连接时,会引发以下错误: 问题答案: 您需要一个证书来建立ssl连接,您可以在密钥库中加载证书,也可以加载证书本身。我将显示一些有关keystore选项的示例。 您的代码需要一些参数才能运行: 您
问题内容: 我想将数据发送到服务器,然后等待一分钟,然后关闭套接字。 怎么做? 问题答案: 你可以试试看 根据您的情况更改套接字的超时!此代码将发送一条消息,然后等待接收消息,直到达到超时!
这很好,但没有SSL。 我已经使用OpenSSL为服务器和客户机生成了SSL证书,结果是: 服务器的证书(PEM格式) 客户端的证书(PEM格式) 服务器的私钥(PEM格式) 客户端的私钥(PEM格式) CA文件(PEM、CER和CRT格式) null 会出什么问题?
问题内容: 我正在加密服务器和客户端之间的TCP连接。在研究和测试过程中,我倾向于使用秘密密钥加密。我的问题是我找不到有关如何实现此功能的任何教程。我发现的教程围绕一次HTTP请求进行,我只需要一个SSL套接字。 我到目前为止编写的代码如下。我几乎可以肯定它需要扩展,我只是不知道该怎么做。任何帮助表示赞赏。 接受客户端连接的服务器代码 我只是不知道如何实际进行握手。 参考:http : //doc
在套接字最终接受另一端消失的情况下,什么指定了这个超时?是操作系统(Ubuntu 11.04),还是来自TCP/IP规范,还是套接字配置选项?
问题内容: 我正在尝试在Python中建立安全的套接字连接,而使用SSL有点麻烦。我已经找到一些有关如何与SSL建立连接的代码示例,但它们都涉及密钥文件。我尝试连接的服务器不需要接收任何密钥或证书。我的问题是,我该如何实质上包装带有SSL的python套接字连接。我知道我应该使用的密码是,协议是。这就是我一直在尝试的: 运行此代码时,没有任何错误,但响应为空。当尝试在命令行中调试此代码时,通过在终