簡體   English   中英

Android客戶端套接字無法連接到服務器

[英]Android client socket unable to connect to server

我有一個服務器套接字在我的本地計算機上偵聽,我試圖從我的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 
         }
}

我一直收到的錯誤是套接字連接超時。幫助?

非常感謝!

發現了這個問題。 我正在使用這段代碼來獲取服務器的本地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

第一個數字是正確的數字。

有人可以從網絡的角度解釋一下,這兩個數字/獲得它們的代碼有什么區別以及為什么一個起作用?

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM