title: Android java.net.SocketTimeoutException: Connection timed out
body: <p>Recently I have encounter the following error in my program:</p>
  
  <pre><code>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.&lt;init&gt;(HttpConnection.java:75)
  11-18 12:30:30.259: W/System.err(21368):    at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.&lt;init&gt;(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)
  </code></pre>
  
  <p>The function that created this error is as follows :</p>
  
  <pre><code>    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(); //&lt;&lt; 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's response
                      BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
                      String response = reader.readLine();
                      System.out.println("Server's response: " + response);
                  } else {
                      System.out.println("Server returned non-OK code: " + responseCode);
                  }
  
              } catch (Exception e) {
                  e.printStackTrace();
                  sendStuff();
              }
  
          }
      }).start();
  
  }
  </code></pre>
  
  <p>This function is perfectly working in normal JAVA but when copied to Android it casts <code>java.net.SocketTimeoutException: Connection timed out</code> and I don't know why.</p>