0

我已经完成了一个将数据从服务器发送到客户端的应用程序......代码(服务器和客户端)在桌面应用程序中完美运行,但是当我将客户端放在 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();

            }
        }
4

3 回答 3

0

它必须是阻止连接的防火墙。您可以禁用它并重试。如果还有问题,请使用wireshark捕获一些数据包以检查问题所在。

您可以在 Linux 或 Windows 上尝试“netstat -n”来查看您的服务器套接字是否正在绑定和侦听。

于 2013-08-29T06:48:09.493 回答
-1

将您的 android 应用程序更改为客户端,将桌面应用程序更改为服务器。这种方式更容易和安全(当然在我看来)。您的移动设备 ip 可以随时更改,因为......您知道它是移动的。您的客户无法猜测他们的移动服务器的 ip。

将您的 Client.java 移动到您的 android 应用程序和 Server.java 到您的桌面应用程序。

于 2013-08-29T07:13:47.177 回答
-1

尝试使用“ifconfig”(如果您在 Linux 上工作)检查您的 IP 地址,如果您在 Windows 系统上工作,请尝试使用“ipconfig”;确保您的 IP 地址正好是“192.168.1.74”。

于 2016-06-30T23:59:48.890 回答