2017-02-20 6 views
1

Я новичок в программировании на Android. В то время как я пытаюсь подключиться к PHP с моего Android-клиента (WAMP), я получаю следующую ошибку:java.net.SocketTimeoutException: не удалось подключиться к /192.168.1.8 (порт 8383) после 10000ms

java.net.SocketTimeoutException: failed to connect to /192.168.1.8 (port 8383) after 10000ms 
'I had searched for this type of error and had made all prescribed changes including Changing localhost to ipv address, changing the Timeout interval, configuring the httpd.conf file, still couldn't resolve.Pls find below the code, conf file changes and error log 

Error Log: 

java.net.SocketTimeoutException: failed to connect to /192.168.1.8 (port 8383) after 10000ms 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at libcore.io.IoBridge.connectErrno(IoBridge.java:169) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at libcore.io.IoBridge.connect(IoBridge.java:122) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at java.net.Socket.connect(Socket.java:882) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.android.okhttp.internal.Platform.connectSocket(Platform.java:139) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.android.okhttp.Connection.connect(Connection.java:148) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:491) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.example.vijayar.phpconnect.MainActivity$AsyncRetrieve.doInBackground(MainActivity.java:80) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at com.example.vijayar.phpconnect.MainActivity$AsyncRetrieve.doInBackground(MainActivity.java:33) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
02-20 07:42:34.857 3370-3512/com.example.vijayar.phpconnect W/System.err:  at java.lang.Thread.run(Thread.java:818) 
02-20 07:42:35.007 3370-3510/com.example.vijayar.phpconnect V/RenderScript: 0xb0f4b600 Launching thread(s), CPUs 3 

Java Code

public class MainActivity extends AppCompatActivity { 

// CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds 
public static final int CONNECTION_TIMEOUT = 10000; 
public static final int READ_TIMEOUT = 10000; 
TextView textPHP; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textPHP = (TextView) findViewById(R.id.textPHP); 
    //Make call to AsyncRetrieve 
    new AsyncRetrieve().execute(); 
} 

private class AsyncRetrieve extends AsyncTask<String, String, String> { 
    ProgressDialog pdLoading = new ProgressDialog(MainActivity.this); 
    HttpURLConnection conn; 
    URL url = null; 

    //this method will interact with UI, here display loading message 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     pdLoading.setMessage("\tLoading..."); 
     pdLoading.setCancelable(false); 
     pdLoading.show(); 

    } 

    // This method does not interact with UI, You need to pass result to onPostExecute to display 
    @Override 
    protected String doInBackground(String... params) { 
     try { 
      // Enter URL address where your php file resides 
      url = new URL("http://192.168.1.8:8383/Checking/Checking.php"); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return e.toString(); 
     } 
     try { 

      // Setup HttpURLConnection class to send and receive data from php 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(READ_TIMEOUT); 
      conn.setConnectTimeout(CONNECTION_TIMEOUT); 
      conn.setRequestMethod("GET"); 

      // setDoOutput to true as we recieve data from json file 
      conn.setDoOutput(true); 

     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
      return e1.toString(); 
     } 

     try { 

      int response_code = conn.getResponseCode(); 

      // Check if successful connection made 
      if (response_code == HttpURLConnection.HTTP_OK) { 

       // Read data sent from server 
       InputStream input = conn.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
       StringBuilder result = new StringBuilder(); 
       String line; 

       while ((line = reader.readLine()) != null) { 
        result.append(line); 
       } 

       // Pass data to onPostExecute method 
       return (result.toString()); 

      } else { 

       return ("unsuccessful"); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
      return e.toString(); 
     } finally { 
      conn.disconnect(); 
     } 


    } 

    // this method will interact with UI, display result sent from doInBackground method 
    @Override 
    protected void onPostExecute(String result) { 

     pdLoading.dismiss(); 
     if(result.equals("Success! This message is from PHP")) { 
      textPHP.setText(result.toString()); 
     }else{ 
      // you to understand error returned from doInBackground method 
      Toast.makeText(MainActivity.this, result.toString(), Toast.LENGTH_LONG).show(); 
     } 

    } 

} 
} 

Manifest File 
<uses-permission android:name="android.permission.INTERNET"/> 

In Httpd.conf the following changes are made 
#Listen 12.34.56.78:8383 
Listen 0.0.0.0:8383 
Listen [::0]:8383 

<Directory /> 
    AllowOverride None 
Options None 
Allow from All 
Require all granted 
</Directory> 

PHP файл -> Checking.Php

<?php 
     echo "Success! This message is from PHP"; 
?> 

РНР работает страница штраф при вызове из браузера.

+0

вы добавить разрешение ? – tesla1984

+0

Используете ли вы эмулятор для тестирования? Если вы не можете получить доступ к странице из браузера устройства? – akash93

+0

, прежде чем пытаться получить к нему доступ из кода Android, вы можете убедиться, что порт доступен даже через telnet? – liorsolomon

ответ

0

Проблема заключается в том, что ваша конфигурация Apache может прослушиваться с неправильным адресом ip. Android пытается получить доступ к ip-адресу 192.168.1.8:8383, и ваш сервер Apache должен находиться в одной сети с вашим устройством Android. Я бы рекомендовал вам убедиться, что ваше устройство Android находится в той же сети, что и сервер Apache, и что ваш сервер настроен на прослушивание на правильном ip-адресе, который Android также пытается подключить.

+0

Оба устройства, Android и ноутбук подключены к одному и тому же WiFi, должны ли я все равно внести какие-либо изменения. Pls советует –

+0

Вам необходимо обновить Android для подключения к ip-адресу, на котором работает сервер Apache. Какой IP-адрес используется сервером Apache? –

+0

В httpd.conf я добавил эту строку Listen 192.168.1.8:8383, (Это тот же IP-адрес: порт передан по URL-адресу) –

0

Timeout проблема решена, это то, что я сделал, я добавил ipv4 Слушать команду в httpd.conf файл и временно отключен антивирусный шлюз (который предотвращала запроса от удара сервера) -