Android java.net.SocketTimeoutException: connection timeout

I recently encountered the following error in my program:

11-18 12:30:30.259: W/System.err(21368): java.net.SocketTimeoutException: Connection timed out 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method) 11-18 12:30:30.259: W/System.err(21368): at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357) 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204) 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437) 11-18 12:30:30.259: W/System.err(21368): at java.net.Socket.connect(Socket.java:1002) 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:75) 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48) 11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322) 11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89) 11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285) 11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267) 11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205) 11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:614) 11-18 12:30:30.269: W/System.err(21368): at com.example.simplevider.SimpleVideo$4.run(SimpleVideo.java:122) 11-18 12:30:30.279: W/System.err(21368): at java.lang.Thread.run(Thread.java:1019) 

The function that generated this error is as follows:

  private void sendStuff() { Log.e("sendStuff", "======================================"); new Thread(new Runnable() { @Override public void run() { final int BUFFER_SIZE = 4096; try { File uploadFile = new File(existingFileName); System.out.println("File to upload: " + existingFileName); URL url = new URL(URL); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setUseCaches(false); httpConn.setDoOutput(true); httpConn.setRequestMethod("POST"); httpConn.setReadTimeout(60*1000); httpConn.setConnectTimeout(60 * 1000); // sets file name as a HTTP header httpConn.setRequestProperty("fileName", uploadFile.getName()); httpConn.setRequestProperty("extra-id", uploadFile.getAbsoluteFile().toString()); httpConn.setRequestProperty("extra-id2", uploadFile.getParent()); httpConn.setRequestProperty("extra-id3", uploadFile.length() + ""); OutputStream outputStream = httpConn.getOutputStream(); //<< this is the source of the error FileInputStream inputStream = new FileInputStream(uploadFile); byte[] buffer = new byte[BUFFER_SIZE]; int bytesRead = -1; System.out.println("Start writing data..."); while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } System.out.println("Data was written."); outputStream.close(); inputStream.close(); // always check HTTP response code from server int responseCode = httpConn.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { // reads server response BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream())); String response = reader.readLine(); System.out.println("Server response: " + response); } else { System.out.println("Server returned non-OK code: " + responseCode); } } catch (Exception e) { e.printStackTrace(); sendStuff(); } } }).start(); } 

This function works fine in regular JAVA, but when copying to Android it makes java.net.SocketTimeoutException: Connection timed out , and I don’t know why.

+1
source share
3 answers

There are two possibilities:

1) checked and tested your connection.

2) it is better not to set the connection timeout, if you set the maximum time, bcos throws an error if the server does not respond within the specified time.

+2
source

You can use this code snippet to exclude haldling:

 HttpURLConnection urlConnection = (HttpURLConnection) callUrl.openConnection(); urlConnection.setReadTimeout(30000); urlConnection.setConnectTimeout(30000); 
0
source

this type of exception can also occur if the firewall blocks the http or https service and unlocks this command.

firewall-> advanced settings β†’ and check the http or https parameters and save enter the image description here

0
source

Source: https://habr.com/ru/post/1246375/


All Articles