2014-01-12 110 views
0

我想连接一个服务器,这是从我的电脑从android设备分配的。 两者都连接在同一个网络中。 IP我的电脑:192.168.1.135 在端口监听:9000连接被拒绝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); 
    } 


} 

我补充了一句,以获得权限在manifest.xml

错误连接INTERNET:

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可能会有所帮助)。

假设您在AndroidManifest.xml文件中拥有android.permission.INTERNET权限。

+0

我可以从浏览器打开网址,我会检查这个工具,谢谢。 – timestron

+0

像'tcpdump port 9000'应该就够了。然后,尝试执行你的应用程序。如果你没有看到数据包,这意味着出于某种原因,你的连接尝试没有到达那台机器(例如,我写第三个原因)。否则,您将不得不调试运行该Web服务器的机器(可能是某些SELinux/AppArmor类应用程序阻止访问)或代码,但我认为这不太可能,因为您没有得到任何异常。 – nKn

+0

Windows有没有类似的东西? – timestron