Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.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 如何从客户端-服务器套接字连接读取响应?_Java_Android_Sockets - Fatal编程技术网

Java 如何从客户端-服务器套接字连接读取响应?

Java 如何从客户端-服务器套接字连接读取响应?,java,android,sockets,Java,Android,Sockets,我正在从我的Android应用程序执行shell命令。我能够执行命令,但无法从服务器读取响应。 我的代码如下: public String executeThroughSocket(int portNo, String portAddress, String command) throws IOException { StringBuilder responseString = new StringBuilder(); PrintWriter writer = null;

我正在从我的Android应用程序执行shell命令。我能够执行命令,但无法从服务器读取响应。 我的代码如下:

public String executeThroughSocket(int portNo, String portAddress, String command) throws IOException {

    StringBuilder responseString = new StringBuilder();

    PrintWriter writer = null;
    BufferedReader bufferedReader = null;
    Socket clientSocket = null;

    try {
        clientSocket = new Socket(portAddress, portNo);
        if (!clientSocket.isConnected())
            throw new SocketException("Could not connect to Socket");

        clientSocket.setKeepAlive(true);

        writer = new PrintWriter(clientSocket.getOutputStream(), true);
        writer.println(command);
        writer.flush();

        bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        String str;
        while ((str = bufferedReader.readLine()) != null) {
            responseString.append(str);
        }

    } finally {
        if (writer != null)
            writer.close();
        if (bufferedReader != null)
            bufferedReader.close();
        if (clientSocket != null)
            clientSocket.close();
    }
    return responseString.toString();
}

我的代码没有问题。服务器没有发送任何响应。

您必须为套接字设置超时


clientSocket.setSoTimeout(5000);//milisekundy

是由您编写的执行您的命令的服务器吗?如果是,你也可以发布代码。似乎阻塞发生在一些调试输出或在调试中运行,并突出显示挂起的行。很可能像readLine()这样的东西永远找不到行尾或like@premkumar服务器不是我开发的。我认为从服务器端看,没有任何东西可以被读取。对于调试:bufferedReader.readLine()返回null.well-如果服务器没有发送任何内容,您将无法读取。我猜是这样。我没有服务器的源代码,因此无法确定服务器是否反映。您应该解释,为什么您的代码片段有助于改进答案。添加超时不会得到响应,只需引发超时异常即可。