簡體   English   中英

TCP套接字編程在台式機和Android平板電腦之間不起作用

[英]TCP Socket programming not working between desktop and android tablet

我已經完成了一個將數據從服務器發送到客戶端的應用程序。...代碼(服務器和客戶端)在桌面應用程序中可以完美運行,但是當我將客戶端放在android平板電腦和服務器在桌面上時,它無法正常工作

我正在使用wifi在android和桌面之間進行通信

我設置的權限如下所示

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

誰能告訴我這是什么問題.....

我收到這個例外

java.net.ConnectException: failed to connect to /192.168.1.74 (port 4545): connect failed: ECONNREFUSED (Connection refused)

服務器.java

public class Server
{
  private int TAB_SERVER_PORT = 4545;
  private static PrintWriter TABout;
  private HashSet <PrintWriter> TABhs=new HashSet<PrintWriter>();
  public static void main(String args[])
  {
    new Thread(new TABServerThread()).start();
  } 

    private class TABServerThread implements Runnable {
        private ServerSocket TABserver;
        @Override
        public void run() {
            try {
                TABserver = new ServerSocket(TAB_SERVER_PORT);
                System.out.println("Server Start the server at port " + TAB_SERVER_PORT + " and waiting for clients...");
                while (true) {
                    Socket socket = TABserver.accept();
                    System.out.println("Server Accept socket connection: "+ socket.getLocalAddress());
                    new Thread(new TABClientHandler(socket)).start();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    private class TABClientHandler implements Runnable {
        private Socket clientSocket;
        private Scanner in;
        public TABClientHandler(Socket clietSocket) {
            this.clientSocket = clietSocket;
        }
        @Override
        public void run() {
            try {
                TABout = new PrintWriter(clientSocket.getOutputStream());
                TABhs.add(TABout);
                in = new Scanner(clientSocket.getInputStream());
                String line;
                while ((line = in.nextLine()) != null) {
                    if (line.equals("Reply")){
                        TABout.print("Server replies");
                        TABout.flush();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }
}

客戶端.java

public class Client implements Runnable {
            private int TAB_SERVER_PORT = 4545;
            private Socket tabletclient;
            private PrintWriter tabletout;
            private Scanner in;

            @Override
            public void run() {
                    String line;
                    boolean flag=true;
                    System.out.println("Waiting for server connection....");
                    while(flag){
                    try {
                        tabletclient = new Socket("192.168.1.74", TAB_SERVER_PORT);
                        tabletout = new PrintWriter(tabletclient.getOutputStream());
                        in = new Scanner(tabletclient.getInputStream());
                        try
                        {
                            if((line = in.nextLine())!=null)
                            {
                                System.out.println("Client Server says: " + line);
                                if (line.equals("Hello client")) {
                                    tabletout.println("Reply");
                                    tabletout.flush();
                                }
                            }
                        }catch(Exception d){
                            System.out.println("Connection from server has lost.........");
                        }
                        } catch (UnknownHostException e) {
                        } catch (IOException e) {
                        }
                     }
            }

 public static void main(String[] args) {
               new Thread(new Client()).start();

            }
        }

它必須是阻止連接的防火牆。 您可以禁用它,然后重試。 如果還有其他問題,請使用wireshark捕獲一些數據包以檢查問題出在哪里。

您可以在Linux或Windows上都嘗試“ netstat -n”,以查看服務器套接字是否已綁定並正在那里偵聽。

將您的android應用程序更改為客戶端,將桌面應用程序更改為服務器。 這種方式更加簡單和安全(我認為當然)。由於...您知道它是移動的,因此您的移動設備ip可以隨時更改。您的客戶端無法猜測其移動服務器的ip。

將Client.java移至android應用,將Server.java移至桌面應用。

嘗試使用“ ifconfig”(如果您在Linux上工作)來檢查IP地址,或者嘗試使用“ ipconfig”(如果您在Windows系統上工作); 確保您的IP地址恰好是“ 192.168.1.74”。

暫無
暫無

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

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