我试图在一个线程上打开一个代理(在后台),该线程创建一个新的代理实例,调用一个服务的方法,并在配置该服务后立即.
所有这些都发生在一个线程上:
var background = new Thread(() =>
{
var proxy = new AssignmentSvcProxy(new EndpointAddress(worker.Address));
try
{
proxy.Channel.StartWork(workload);
proxy.Dispose();
}
catch (EndpointNotFoundException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (CommunicationException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (TimeoutException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (Exception ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
}) { IsBackground = true };
background.Start();
Run Code Online (Sandbox Code Playgroud)
即使我已将CloseTimeout,OpenTimeout,ReceiveTimeout,SendTimeout的超时设置为max,我仍然会看到间歇性的超时问题.
我只是想确保设计明智这不是问题,即在线程上打开服务并处理它?
编辑:
代理在内部为每个线程在不同端点上建立一个具有自定义绑定的通道.
这是一个简单的基于客户端/服务器的ping/pong程序.不幸的是,IT不起作用并显示以下错误消息:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
它停在CLIENT TASK 30行,实际上客户端没有读取服务器发送的内容.这里的代码:
package serverClient;
import java.net.*;
import java.io.*;
import java.util.concurrent.*;
public class Server {
public static void main(String[]args){
ExecutorService esp= Executors.newFixedThreadPool(50);
try(ServerSocket ss= new ServerSocket(1027)){
while(true){
try{
Socket s=ss.accept();
Callable<Void> task=new ServerTask(s);
esp.submit(task);
}
catch(BindException be){}
catch(ConnectException ce){}
catch(NoRouteToHostException nrthe){}
catch(IOException ioe){ioe.printStackTrace();}
}
}
catch(Exception e){e.printStackTrace();}
}
}
Run Code Online (Sandbox Code Playgroud)
package serverClient;
import …Run Code Online (Sandbox Code Playgroud) 我HttpURLConnection用来上传图片并得到它的回复.
它适用于模拟器和我的小米设备.
但是,它总能让SocketTimeoutException我的索尼设备上线connection.getInputStream().
我试图将超时设置为大值,如1分钟但不起作用.
public String uploadFile(File file, String requestURL) {
if (file != null) {
long fileSize = file.length();
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection connection = null;
try {
//config of connection
connection = (HttpURLConnection) new URL(requestURL).openConnection();
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
connection.setRequestMethod("PUT");
connection.setRequestProperty("Content-Type", "image/jpeg");
connection.setDoOutput(true);
connection.setRequestProperty("Content-length", "" + fileSize);
connection.connect();
//upload file
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
int bytesRead;
byte buf[] = new byte[1024];
BufferedInputStream bufInput = new BufferedInputStream(new FileInputStream(file));
while ((bytesRead = bufInput.read(buf)) != -1) {
out.write(buf, …Run Code Online (Sandbox Code Playgroud) java android urlconnection httpurlconnection socket-timeout-exception
我用以下代码连接 -
URL url = new URL("https://results.bput.ac.in/");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(1000 * 20);
urlc.connect();
Run Code Online (Sandbox Code Playgroud)
它返回了一个SocketTimeoutException.
例外
我得到的确切例外是
java.net.SocketTimeoutException: failed to connect to results.bput.ac.in/14.139.212.166 (port 443) after 90000ms
Run Code Online (Sandbox Code Playgroud)
有时这个 -
java.net.SocketTimeoutException: failed to connect to results.bput.ac.in/14.139.212.166 (port 80) after 90000ms
Run Code Online (Sandbox Code Playgroud)
urlc.setConnectTimeout(1000 * 20);,仍然得到了例外.URL url = new URL("http://results.bput.ac.in/");但没有结果.URL url = new URL("https://www.facebook.com/");并获得成功回应.问题在于这个特定的网址 - http://results.bput.ac.in/.
信息
我给出的这个链接http://results.bput.ac.in/完全适用于任何网络浏览器,没有任何滞后.
我得到的信息是,一些人不能打开这个网站,它的滞后但我可以毫不拖延地打开它.
我的研究
尝试OkHttp3异步Get时,我不断收到java.net.SocketTimeoutException.这表明我没有将读取超时值设置得足够高(我认为默认值是10秒).
更大的问题是"如何防止这种异常?" 但是,除非有人有更好的初始策略,否则我的直接问题是,"如何为请求设置读取超时值?"
在我的代码中,我使用了Okttp Recipes页面中的信息
注意我的try-catch的前两行被注释掉了.那是因为我不能使用我需要的那种构建器(一个能够设置超时值,OkHttpClient.Builder)来添加头信息(Request.Builder).
我的代码看起来像这样:
m_client = new OkHttpClient();
try
{
//OkHttpClient.Builder bldr = m_client.newBuilder();
//bldr.readTimeout(0, TimeUnit.SECONDS);
Request.Builder reqBuilder = new Request.Builder();
reqBuilder.addHeader("authorization", getToken());
Request request = reqBuilder.url("http://plusdev.kooklah.com/api/v2_1/items/get").build();
m_client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call, IOException e)
{
Log.i("Logit", "Inside onFailure() -- IOException: " + e.getMessage() + " ----- stack trace: " + UtilGen.exceptionToString(e));
runOnUiThread(new Runnable()
{
@Override
public void run()
{
// do stuff on UI thread
}
});
}
@Override
public void onResponse(Call call, …Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,用于从网站上的表中检索一个人的价格.代码获取姓氏并在表中搜索该名称,然后在运行它时返回价格(不同的列)我得到一个java.net.SocketTimeoutException:读取超时时间
这是我用来查询网站的代码
public String price(String lastName) throws IOException
{
Document doc = Jsoup.connect(url).get();
Elements rows = doc.getElementsByTag("tr");;
for(Element row : rows)
{
Elements columns = row.getElementsByTag("td");
String lastName = columns.get(0).text();
String price = columns.get(2).text();
if(lastName.equalsIgnoreCase(name))
{
return price;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud) 在使用spark工作执行Cassandra操作(两个表上的批处理执行 - 插入和更新操作)时,我得到了"所有主机都尝试查询失败 - com.datastax.driver.core.OperationTimedOutException "错误.
集群信息:
Cassandra 2.1.8.621 | DSE 4.7.1
spark-cassandra-connector-java_2.10 version - 1.2.0-rc1 | cassandra-driver-core版本 - 2.1.7
Spark 1.2.1 | Hadoop 2.7.1 => 3个节点
Cassandra 2.1.8 => 5个节点
每个节点有28 gb内存和24个内核
在寻找它的解决方案时,我遇到了一些讨论,其中说你不应该使用BATCHES.虽然我想找到这个错误的根本原因.另外,如何以及从哪里设置/获取"SocketOptions.setReadTimeout",因为此超时限制必须大于Cassandra请求超时(根据标准准则)并避免可能的错误.
是request_timeout_in_ms和SocketOptions.setReadTimeout一样吗?任何人都可以帮我这个吗?
cassandra socket-timeout-exception datastax-enterprise datastax-java-driver
当用户当前正在使用该应用时,我们的Android应用会出现问题,该应用会使用蓝牙扫描信标.应用程序在加载不同视图时从API加载数据.有时,当继续单击视图时,一个请求失败(超时),出现此错误:
java.net.SocketTimeoutException: failed to connect to www.examplehost.com/111.222.333.444 (port 80) after 15000ms
at libcore.io.IoBridge.connectErrno(IoBridge.java:169)
at libcore.io.IoBridge.connect(IoBridge.java:122)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452)
at java.net.Socket.connect(Socket.java:884)
at com.android.okhttp.internal.Platform.connectSocket(Platform.java:117)
at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:434)
at com.android.okhttp.internal.http.SocketConnector.connectCleartext(SocketConnector.java:105)
at com.android.okhttp.Connection.connect(Connection.java:1331)
at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1410)
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:466)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:447)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:353)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:468)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:410)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:532)
Run Code Online (Sandbox Code Playgroud)
(这是我们服务器的IP地址,替换为111.222.333.444)
这是一个超时(> 15秒),而之前的请求相当快.
我没有遇到其他设备的这个问题,只有在更新到Android 6.0.1时才能在Samsung S6上使用.因为应用程序位于前台,我认为它不是Doze或Standby(Android 6中的新功能),因为该应用程序正在被积极使用.但是当应用程序处于后台时可能会出现同样的问题(但很难测试).
LG Nexus 5(也使用Android 6.0.1)问题永远不会发生.有没有人知道我们应该在哪里寻找问题?提前致谢.
android bluetooth socket-timeout-exception ibeacon-android android-6.0-marshmallow
我正在使用http://somethingAPI 进行登录过程。但无法在 Android 10 中使用 API。对于该版本的其余部分,API 运行良好。首先,我收到了SocketTimeoutException。然后我尝试了以下解决方案。
1)<application>在 Manifest 中添加了以下属性。
android:usesCleartextTraffic="true"
Run Code Online (Sandbox Code Playgroud)
结果:仍然收到SocketTimeoutException。
2)然后我补充说networkSecurityConfig:
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">project.dev.company:6001/</domain>
<trust-anchors>
<certificates src="system"/>
</trust-anchors>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
结果:UnknownServiceException:网络安全策略不允许与 project.dev.company:6001/ 的 CLEARTEXT 通信。
3) 还尝试在<base-config>. 仍然收到SocketTimeoutException。
如何允许我的应用从 Android 10 访问 HTTP 连接?我正在使用 Retrofit2 进行网络呼叫。
我创建了一个 Apache HTTP 客户端
CloseableHttpClient client = HttpClients.custom()
.setMaxConnPerRoute(25)
.setMaxConnTotal(50)
.setDefaultRequestConfig(RequestConfig.custom()
.setConnectionRequestTimeout(20_000)
.build())
.build();
Run Code Online (Sandbox Code Playgroud)
我将它用作单例。我有这种发送请求的方法:
public RestResponse sendPost(String serverUrl, String body) throws RestException {
try {
HttpPost httpPost = new HttpPost(serverUrl);
httpPost.setEntity(new StringEntity(body));
try (CloseableHttpResponse response = client.execute(httpPost)) {
RestResponse restResponse = new RestResponse();
restResponse.setCode(response.getStatusLine().getStatusCode());
restResponse.setBody(EntityUtils.toString(response.getEntity()));
return restResponse;
}
} catch (Exception e) {
throw new RestException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
效果很好。但是闲置一段时间(5-6 分钟)后,如果我发送请求,我会得到"java.net.SocketException: Connection reset"
我有 2 个问题
我怎样才能找到这个时间开始的地方?这些参数对我不起作用
.setSocketTimeout(25_000)
.setConnectTimeout(26_000)
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?(我的意思是在每个请求之后或之前重试请求或更改超时或重新连接)
java socket-timeout-exception apache-httpcomponents apache-httpclient-4.x
服务器就像一个echo服务器.客户端向服务器发送10个数据包(1秒的间隙)
当客户端从服务器接收数据包时,有时数据包会丢失.
因此,客户端必须等待最多一秒才能使数据包到达.如果数据包未在1秒内到达,则客户端应继续发送其他数据包.
我将如何使用.setSoTimeout来实现这一目标?
import java.io.*;
import java.net.*;
import java.util.*;
/*
* Client to process ping requests over UDP.
*/
public class PingClient
{
private static final int AVERAGE_DELAY = 100; // milliseconds
public static void main(String[] args) throws Exception
{
// Get command line argument.
int port = Integer.parseInt(args[1]);//specified as argument
// Create random number generator for use in simulating
// packet loss and network delay.
System.out.println("Port "+port);
// Create a datagram socket for receiving and sending UDP …Run Code Online (Sandbox Code Playgroud)