0

我试图通过 telnet 向我的计算机发送命令,然后在使用 telnet 时将命令发送到串行端口

adb shell
$telnet 172.20.104.203 5334
$h

它从命令h返回数据,但是当我尝试使用android执行此操作时,它连接到套接字,我可以在计算机上看到它,它发送命令但是一旦它记录它已经发送它就会挂起并提出“应用程序没有响应”,它有等待或强制关闭,如果我等待它就保持不变。

这是我的 telnet 部分代码

    private static final int TCP_SERVER_PORT = 5334;

    private void runTcpClient() {
        try {
            Socket s = new Socket("172.20.104.203", TCP_SERVER_PORT);
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            //send output msg
            String outMsg = "$getPos"; 
            out.write(outMsg);
            out.flush();
            Log.i("TcpClient", "sent: " + outMsg);
            //accept server response
            String inMsg = in.readLine() + System.getProperty("line.separator");
            Log.i("TcpClient", "received: " + inMsg);
            //close connection
            s.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } 
    }

它记录了发送,但它从不记录接收,我认为这可能与接收到的数据量有关,所以我只是发送了

$getPos 

相反,但它仍然挂起。

有人知道会发生什么吗?

4

1 回答 1

0

我不熟悉平台的细节,但是 readline 不太可能在 socket/tcp 流上工作,或者如果它工作,它会不可靠地工作。来自套接字的数据不一定被组织成“行”,而是特定大小的数据包。在套接字上执行的“读取”将返回一些字节数。

进行此类读取的客户端需要读取每个数据包,缓冲它们,直到它收到商定的“数据结束”标记。商定的标记由协议确定。

您已经向我们展示了代码的客户端。有对应的服务器端吗?

From what you have here, my guess is that your client code is waiting patiently for an 'end of line' that for some reason, will never come. OR there's something wrong at the server end and the server isn't sending any data to the client.

于 2012-05-04T02:33:10.567 回答