如何使用套接字将Android移动设备上的移动应用程序连接到笔记本电脑服务器?

3
我有一个非常简单的Java服务器在我的笔记本电脑上运行。另一边,我有一个很简单的客户端在我的平板电脑上连接到我的服务器,但它没有工作。 两者都在同一个无线网络上运行。
服务器示例: ServerSocket serverSocket = null; Socket socket = null; DataInputStream dataInputStream = null; DataOutputStream dataOutputStream = null;
    try {
        serverSocket = new ServerSocket(8888);
        System.out.println("Listening :8888");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    while(true){
        try {
            socket = serverSocket.accept();
            dataInputStream = new DataInputStream(socket.getInputStream());
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            System.out.println("ip: " + socket.getInetAddress());
            System.out.println("message: " + dataInputStream.readUTF());
            dataOutputStream.writeUTF("Hello!");

简单的客户端代码:

mysock = new Socket(server_adress, port_number);

我尝试设置清单中的WIFI权限。尝试关闭计算机防火墙。有关无线连接工作方式可能会阻止连接的事情,我应该知道吗?
提前感谢。

你的客户端中 server_address 的值是多少? - Moyshe
我的当前IP地址来自于命令行。10.101.224.119。 - Z3phs
我会尝试连接一些已确认的服务器(比如谷歌),然后我会使用外部验证过的好软件(例如Apache、XAMPP)尝试连接我的笔记本电脑,以确保连接、寻址、防火墙等方面都没有问题。如果这样能行,我会尝试连接我的自己的服务器。你有尝试过这种原始的调试方法吗? - Moyshe
我知道的无线路由器都有一个选项,可以禁用不同无线设备之间的通信。也许你的路由器也是这样,并且已经激活了。你能从你的智能手机ping到PC的IP地址吗? - Robert
1个回答

1

你需要为INTERNET设置权限。

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

客户端:

String adresaServer = "192.168.4.120";

        int PORT = 8095;
        Socket socket = null;

        DataInputStream in = null;

        try {
            socket = new Socket();
            SocketAddress adr = new InetSocketAddress(adresaServer, PORT);
            socket.connect(adr, 1500);

            out = new DataOutputStream(socket.getOutputStream());
            in = new DataInputStream(socket.getInputStream());
            out.flush();
        } catch (SocketTimeoutException e) {
            System.err.println(" Error at CONNECTINGG: \n" + e);

        } catch (UnknownHostException e) {
            System.err.println(" Serverul nu poate fi gasit \n" + e);
            System.exit(1);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
        out.writeFloat(sensors.getValueGyroZ());
            } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (Exception e) {

                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

服务器端:

ServerSocket serverSocket = null;

        try {
            serverSocket = new ServerSocket(PORT);
            serverSocket.setSoTimeout(1600000);

            System.out.println(" Waiting a client ... ");
            Socket socket = serverSocket.accept();
            int i = 0;
            DataOutputStream out = new DataOutputStream(
                    socket.getOutputStream());



            while (true) {


                DataInputStream in = new DataInputStream(
                        socket.getInputStream());



            System.out.println(String.valueOf(in.readFloat()));

            }

        } catch (IOException e) {
            System.err.println(" Eroare IO \n" + e);


        } finally {
            try {
                serverSocket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

连接失败了 :( 你是怎么连接的?想让我的也能这样。你是在台式机/笔记本电脑上运行服务器,然后通过移动设备上的客户端连接它吗? - Z3phs
这是我的代码,它可正常运行,请尝试在您的情况下进行调整,并将其作为结构化的示例,但不要认为它非常可靠(因为您只需要播放代码,它就会正常工作)。 - Dany's
谢谢伙计,它与我已有的相似。但是它无法连接。我认为这是我的无线网络问题。没有任何东西能到达服务器。 - Z3phs
你确定在客户端设置了服务器IP地址为你电脑的IP地址了吗? - Dany's
1
谢谢大家,问题确实出在网络上。我换了一个网络,现在一切正常了。 - Z3phs
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接