Java TCP套接字编程在桌面和android平板电脑之间不起作用

Java TCP套接字编程在桌面和android平板电脑之间不起作用,java,android,sockets,Java,Android,Sockets,我做过一个应用程序,它将数据从服务器发送到客户端……这个代码(服务器和客户端)在桌面应用程序中运行得非常好,但当我将客户端放在android平板电脑上,而服务器放在桌面上时,它就不工作了 我使用wifi在android和桌面之间进行通信 我设置的权限如下所示 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.perm

我做过一个应用程序,它将数据从服务器发送到客户端……这个代码(服务器和客户端)在桌面应用程序中运行得非常好,但当我将客户端放在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" />
Server.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();
            }

        }

    }
}
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


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

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

您确定服务器允许连接到此端口吗?有防火墙阻止它吗?@Henry sir没有防火墙…….先生如何检查防火墙是否阻止…….你能告诉我怎么做吗?你的主机的操作系统是什么?查看我编辑的答案,你是否尝试使用netstat命令检查你的服务器套接字是否正常工作?如果它在那里,你够不着,然后是防火墙——第三方防火墙或默认的microsoft工具——阻止了连接。先生,我有很多ip……我的android平板电脑ip是192.168.1.67,但它不在那里……。制作移动设备服务器太难了。如果你制作安卓设备客户端和桌面服务器,你可能很容易做到。你知道吗你的移动设备ip可以随时更改。我看到你的Client.java在桌面上工作,因为它有一个main方法。现在它就像android中的Client.java一样,和desktop中的Server.java尝试从该错误中获取桌面的internet ip意味着在大多数情况下没有服务器侦听此端口或ip。这与手头的问题有什么关系?你可以随心所欲地在android上运行服务器/我说过这种方式更简单。不是不可能。请通读一遍。你的否决票毫无意义。先生。。。。。现在,我的客户端正在连接到服务器…但服务器无法使用…out.println(“消息”)将任何数据…发送到客户端;我曾多次尝试在安卓平板电脑和个人电脑之间建立连接,但似乎只有安卓平板电脑作为服务器,个人电脑作为客户端才能正常工作。
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();

            }
        }