2013-11-21 232 views
2

我有一个服务器套接字在我的本地计算机中侦听,并且我试图从我的android手机连接到此服务器。 我已经使用同一台计算机上的客户端测试了服务器套接字,并且它们能够连接。Android客户端套接字无法连接到服务器

但是,我的android手机客户端不能连接到套接字。 我的电脑的防火墙已关闭。我的电脑和手机都连接到同一个wifi网络。有人可以帮忙吗?

代码下面的客户端套接字:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Thread fst = new Thread(new startConnection()); 
     fst.start(); 
    } 

public class startConnection implements Runnable { 
     public void run() { 
      try {   
       final InetAddress hostAddr = InetAddress.getByName("192.168.2.1");//This is the local IP of my computer where the serversocket is listening 
         clientSocket = new Socket(); 
         clientSocket.bind(null); 
         clientSocket.connect(new InetSocketAddress(hostAddr, 12555),30000); 
       } catch (Exception e) { 
         e.printStackTrace(); 
       } // end TryCatch block 
     } 
} 

,我不断收到错误是套接字连接timeout.Help?

非常感谢!

+0

你的电脑里是否有像kasperSky这样的反病毒软件?如果是这样,您需要关闭它,因为它可以防止未经授权的访问。 – Coderji

+0

只是我关掉的防火墙。我有一个mac,不知道这是否有所作为 –

+0

您是否尝试过手机上的另一个客户端(浏览器)连接到服务器?服务器收到客户的请求了吗? – Zhongzhi

回答

1

FOund the issue。 我使用这段代码来获取服务器的本地IP:

try { 
    ip = InetAddress.getLocalHost(); 
}catch (UnknownHostException e) { 
     e.printStackTrace(); 
} 

这是给像192.168.2.1服务器的本地IP。然后我使用这个地址连接客户端到服务器,并且连接从未工作。

我不得不使用像10.0.0.9这样的数字,然后工作。 为了得到那正确的IP,我不得不使用此代码:

Enumeration<NetworkInterface> nis = null; 
       try { 
        nis = NetworkInterface.getNetworkInterfaces(); 
       } catch (SocketException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       NetworkInterface ni; 
       while (nis.hasMoreElements()) { 
        ni = nis.nextElement(); 
        try { 
         if (!ni.isLoopback() && ni.isUp()) { 
          for (InterfaceAddress ia : ni.getInterfaceAddresses()) { 
           //filter for ipv4/ipv6 
           if (ia.getAddress().getAddress().length == 4) { 
            //4 for ipv4, 16 for ipv6 
            System.out.println(ia.getAddress()); 
           } 
          } 
         } 
        } catch (SocketException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 

这给了我: /10.0.0.9 /192.168.2.1

第一个数字是正确的。

有人可以从网络的角度来解释,这两个数字/获取它们的代码有什么区别,以及为什么有效?

谢谢!

相关问题