Android客户端套接字无法连接到服务器

时间:2013-11-21 05:32:55

标签: java android sockets

我有一个服务器套接字在我的本地计算机上监听,我试图从我的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 
         }
}

我一直得到的错误是套接字连接超时。帮助?

非常感谢!

1 个答案:

答案 0 :(得分:1)

支持这个问题。 我正在使用这段代码来获取服务器的本地IP:

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

这为服务器的本地IP提供了类似于192.168.2.1的内容。然后我使用这个地址将客户端连接到服务器,连接从未起作用。

我不得不使用类似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

第一个数字是正确的。

有人可以从网络的角度解释这两个数字的差异/得到它们的代码以及为什么有效吗?

谢谢!