我想将一些json字符串发布到某个URL。我收到
Exception: java.net.SocketTimeoutException: failed to connect to
有关此问题的大量搜索结果,人们建议在改造中增加和减少超时参数。我想知道writeTimeout,readTimeout和connectTimeout之间的区别。这样我就可以触发SocketTimeoutException。这是我的老客户。
public static Retrofit getClient() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().writeTimeout(20, TimeUnit.SECONDS).
//.authenticator(new Authen()).
readTimeout(30, TimeUnit.SECONDS).
connectTimeout(20, TimeUnit.SECONDS).
addInterceptor(interceptor).build();
return new Retrofit.Builder()
.baseUrl(DefinesClass.ITS_URL)
// .baseUrl("https://reqres.in")
// .addConverterFactory(GsonConverterFactory.create())
.addConverterFactory(SimpleXmlConverterFactory.create())
.client(client)
.build();
}
有什么办法可以对异常帮助人员进行排序?
答案 0 :(得分:2)
SocketTimeOut表示您的客户端无法访问服务器。尝试在 Postman 中测试WebService。
与写超时相同,我们未能在给定时间内写任何东西。
答案 1 :(得分:1)
这三种方法之间的差异如下:
connectTimeout:
设置新连接的默认连接超时。值0表示没有超时,否则值转换为毫秒时必须在1到Integer.MAX_VALUE
之间。
将TCP套接字连接到目标主机时,将应用 connectTimeout
。默认值为10秒。
readTimeout:
设置新连接的默认读取超时。值0表示没有超时,否则值转换为毫秒时必须在1到Integer.MAX_VALUE
之间。
读取超时适用于TCP套接字,也适用于单个读取IO操作,包括在响应源上。默认值为10秒。
writeTimeout:
设置新连接的默认写入超时。值0表示没有超时,否则值转换为毫秒时必须在1到Integer.MAX_VALUE
之间。
写超时适用于单独的写IO操作。默认值为10秒。
来自here的来源。