Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中创建侦听本地主机端口的套接字_Java_Android_Sockets - Fatal编程技术网

Java 如何在Android中创建侦听本地主机端口的套接字

Java 如何在Android中创建侦听本地主机端口的套接字,java,android,sockets,Java,Android,Sockets,在解释我的疑问之前,我想确定在这个环境中有三个“演员”: 在某些服务器上执行的桌面程序 通过计算机远程使用此程序的人 以及通过USB与电脑连接的Android平板电脑应用程序 当用户点击远程使用的程序中的链接栏时,会有一个shell脚本将字符串发送到用户的计算机端口(例如1100)。要求是:从桌面接收此字符串后,将其发送到平板电脑 那么,将这个字符串从桌面接收到平板电脑的最佳方式是什么 现在有一个java守护进程正在桌面计算机上运行,它正在侦听1100端口。这个java应用程序是桌面电脑和平

在解释我的疑问之前,我想确定在这个环境中有三个“演员”:

  • 在某些服务器上执行的桌面程序
  • 通过计算机远程使用此程序的人
  • 以及通过USB与电脑连接的Android平板电脑应用程序
当用户点击远程使用的程序中的链接栏时,会有一个shell脚本将字符串发送到用户的计算机端口(例如1100)。要求是:从桌面接收此字符串后,将其发送到平板电脑

那么,将这个字符串从桌面接收到平板电脑的最佳方式是什么


现在有一个java守护进程正在桌面计算机上运行,它正在侦听1100端口。这个java应用程序是桌面电脑和平板电脑之间的中间媒介,但我认为可能有一种方法可以删除这个守护进程,只需使用平板电脑接收计算机数据,创建一个套接字。

您也可以在安卓系统中实现java套接字。与Android中的wise on Desktop Sockets一样,Android中的wise on Desktop Sockets监听端口,但这将在本地访问,因为没有这样的方式将静态可用IP分配给Android设备

还有另一种解决方案是socket.io
io是我使用过的最好的套接字库之一。在Node.js服务器和Android上实现socket.io只需连接到Node.js服务器,您就可以向所有连接的用户发送相同的字符串,无论是桌面用户还是Android用户

您还可以在Android中实现Java套接字。与Android中的wise on Desktop Sockets一样,Android中的wise on Desktop Sockets监听端口,但这将在本地访问,因为没有这样的方式将静态可用IP分配给Android设备

private class ServerThread extends Thread {

    @Override
    public void run() {
        try {
            serverSocket = new ServerSocket(portNumber);

            while (true) {
                try {
                    clientSocket = serverSocket.accept();
                } catch (IOException e) {
                    LOGGER.error("Error on accept!");
                }
                // new thread for a client
                new EchoThread(clientSocket).start();
            }

        }catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

public class EchoThread extends Thread {
    protected Socket clientSocket;
    BufferedReader br = null;

    public EchoThread(Socket clientSocket) {
        this.clientSocket = clientSocket;
    }

    public void run() {
        try {
             br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        } catch (IOException e) {
            ...
        }

        isConnected = true;

        while (isConnected) {
            try {
                receivedMessage = br.readLine();
                if (!Strings.isNullOrEmpty(receivedMessage)) {
                    ....
                }
                else {
                    //sleep 0,1s
                    //TODO (ver): Thread.sleep(100);
                }
            } catch (Exception e) {
                if (e instanceof IOException) {
                }
                else if (e instanceof JsonSyntaxException){
                }
                else {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException inte) {
                        inte.printStackTrace();
                    }
                }
            }

            if (//yourmessagecondition){
                isConnected = false;
            }
        }
        if (!isConnected){
            try {
                br.close();
                clientSocket.close();
            }catch (IOException ioe){
                ioe.printStackTrace();
            }
        }
    }
}
还有另一种解决方案是socket.io io是我使用过的最好的套接字库之一。在Node.js服务器和Android上实现socket.io只需连接到Node.js服务器,您就可以向所有连接的用户发送相同的字符串,无论是桌面用户还是Android用户

private class ServerThread extends Thread {

    @Override
    public void run() {
        try {
            serverSocket = new ServerSocket(portNumber);

            while (true) {
                try {
                    clientSocket = serverSocket.accept();
                } catch (IOException e) {
                    LOGGER.error("Error on accept!");
                }
                // new thread for a client
                new EchoThread(clientSocket).start();
            }

        }catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

public class EchoThread extends Thread {
    protected Socket clientSocket;
    BufferedReader br = null;

    public EchoThread(Socket clientSocket) {
        this.clientSocket = clientSocket;
    }

    public void run() {
        try {
             br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        } catch (IOException e) {
            ...
        }

        isConnected = true;

        while (isConnected) {
            try {
                receivedMessage = br.readLine();
                if (!Strings.isNullOrEmpty(receivedMessage)) {
                    ....
                }
                else {
                    //sleep 0,1s
                    //TODO (ver): Thread.sleep(100);
                }
            } catch (Exception e) {
                if (e instanceof IOException) {
                }
                else if (e instanceof JsonSyntaxException){
                }
                else {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException inte) {
                        inte.printStackTrace();
                    }
                }
            }

            if (//yourmessagecondition){
                isConnected = false;
            }
        }
        if (!isConnected){
            try {
                br.close();
                clientSocket.close();
            }catch (IOException ioe){
                ioe.printStackTrace();
            }
        }
    }
}
希望这有帮助,它在这里工作。。。你可能会在网上找到更简单的例子。 PS:如果您使用USB电缆与计算机应用程序通信,您可以使用“adb forward”命令,只需在谷歌上搜索一些示例,并在有帮助的情况下接受此答案;)

希望这有帮助,它在这里工作。。。你可能会在网上找到更简单的例子。 PS:如果您使用USB电缆与计算机应用程序通信,您可以使用“adb forward”命令,只需在谷歌上搜索一些示例,并在有帮助的情况下接受此答案;)

可能的重复可能的重复