2014-01-12 2 views
0

Я пытаюсь подключиться на сервере, который выделяется на моем компьютере с устройства Android. Оба подключены в одной сети. IP моего компьютера: 192.168.1.135 Прослушивание в порту: 9000Connection failed android

import android.view.MenuItem; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     //setContentView(R.layout.activity_main); 

       new Thread(new Runnable() { 
        public void run() { 

         try { 

          HttpClient httpclient = new DefaultHttpClient(); 
          HttpPost httppost = new HttpPost("http://192.168.1.135:9000/application/login"); 

          // Add your data 
          List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
          nameValuePairs.add(new BasicNameValuePair("username", "timestron")); 
          nameValuePairs.add(new BasicNameValuePair("password", "00000")); 
          httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

          // Execute HTTP Post Request 
          HttpResponse response = httpclient.execute(httppost); 

           readStream(response.getEntity().getContent()); 
           } catch (Exception e) { 
           e.printStackTrace(); 
          }   
        } 
       }).start(); 


    ///////////////////////////////////-fin oncreate  
    } 

    private void readStream(InputStream in) { 
      BufferedReader reader = null; 
      try { 
      reader = new BufferedReader(new InputStreamReader(in)); 
      String line = ""; 
      while ((line = reader.readLine()) != null) { 
       System.out.println(line); 
      } 
      } catch (IOException e) { 
      e.printStackTrace(); 
      } finally { 
      if (reader != null) { 
       try { 
       reader.close(); 
       } catch (IOException e) { 
       e.printStackTrace(); 
       } 
      } 
      } 
     } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 


} 

я добавил фразу, чтобы получить разрешения для подключения INTERNET в Manifest.xml

Ошибка:

01-12 16:52:59.165: W/System.err(8406): org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.1.135:9000 refused 
01-12 16:52:59.165: W/System.err(8406):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183) 
01-12 16:52:59.165: W/System.err(8406):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
01-12 16:52:59.165: W/System.err(8406):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
01-12 16:52:59.165: W/System.err(8406):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
01-12 16:52:59.165: W/System.err(8406):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670) 
01-12 16:52:59.165: W/System.err(8406):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509) 
01-12 16:52:59.165: W/System.err(8406):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 

ответ

0

Очевидно, что это не проблема с маршрутизатором-брандмауэром, поскольку вы находитесь под одной сетью, поэтому есть только три возможности:

  1. Там нет ничего прослушивает этот порт на этом IP
  2. Там есть локальный брандмауэр на этой машине, которая блокирует эту попытку соединения
  3. Вы не используете WIFI, так что вы не под одной и той же сети.

Можете ли вы открыть этот URL-адрес из своего браузера на своем компьютере вручную? Если да, я бы предложил использовать какой-либо инструмент для отладки для трассировки пакетов TCP (я не знаю, какую операционную систему вы используете на конечной машине, если это какой-то дистрибутив Linux, может помочь tcpdump).

Все, что предполагает, что у вас есть разрешение android.permission.INTERNET в вашем файле AndroidManifest.xml.

+0

Я могу открыть URL-адрес из браузера, я проверю этот инструмент, спасибо. – timestron

+0

Кое-что вроде 'tcpdump port 9000' должно быть достаточно. Затем попробуйте выполнить свое приложение. Если вы не видите пакеты, это означает, что по какой-то причине попытка подключения не доходит до этой машины (например, по третьей причине, которую я написал). В противном случае вам придется отлаживать либо машину, на которой работает этот веб-сервер (возможно, какое-либо приложение типа SELinux/AppArmor, блокирующее доступ), либо код, который, я думаю, менее вероятен, потому что вы не получаете никакого исключения. – nKn

+0

Есть ли что-то подобное для Windows? – timestron