【问题标题】:Can't receive any response from Telnet server on Android无法从 Android 上的 Telnet 服务器接收任何响应
【发布时间】:2011-09-18 13:43:08
【问题描述】:

我需要在 Android 上实现一个简单的 telnet 客户端。我尝试使用org.apache.commons.net.telnet.TelnetClient 类:

TelnetClient telnet = new TelnetClient();

telnet.connect( "localhost", PORT);

InputStream inStream = telnet.getInputStream();
PrintStream outStream = new PrintStream( telnet.getOutputStream());

outStream.println( COMMAND);
outStream.flush();

int ch = 0;
while( ( ch = inStream.read()) != -1) {
    log("Respose:" + ch);
}

但是inStream.read() 块。

同时,我可以使用 Market 的 Telent 应用从服务器获取响应。

知道我做错了什么吗?

【问题讨论】:

  • 也许使用像byte[] b = new byte[256]; inStream.read(b)这样的缓冲区?
  • "listvar"。服务器是Android猴子测试服务

标签: java android apache-commons telnet


【解决方案1】:

我正在使用 apache telnet 客户端,我遇到了同样的问题。原因是 telnet 服务器是流式响应并且没有 END 令牌。像行尾..等的东西。

所以你会不断获取字节,如果没有传入字节,那么它将在 read() 方法处阻塞。

所以我使用 StringBuilder 将所有传入字节保存为字符,并跟踪始终位于传输流末尾的特定字符串 (":/#")(用于 telnet 连接)。即使是第一次连接。

这是我使用的代码的一部分。

StringBuilder builder = new StringBuilder();
TelnetClient telnet = new TelnetClient();
telnet.connect("127.0.0.1", 23);
outstr = telnet.getOutputStream();
instr = telnet.getInputStream();
int cnt =0;
    while(isConnected){
        if(builder.toString().endsWith(":/ #")){
                cnt++;
                if(cnt==2){
                    Log.i("DATA : ", builder.toString());
                    builder.delete(0, builder.length());
                    cnt=1;
                }
        }
        builder.append((char)instr.read());

    }

如果您注意到如果计数器“cnt”达到 2. 并且计数器设置为 1,则清理构建器。 "cnt" 显示我选择定义流结束的标记 (":/#") 的数量。

第一个连接将给出第一个令牌,但要获得结束,您需要计数器来确定它是否是结束令牌。这就是我使用计数器的原因。

建议:继续在不同线程上监听代码,在另一个线程中发送命令代码。 (最终你会,因为android,你需要处理networkOnMainThread ..等)

不是:上面的代码不是完整的副本。但它是工作的简化部分。完整版以分布式形式将监听、命令发送和异常处理分开。

【讨论】:

    【解决方案2】:

    它会在一些字符后阻塞吗?因为您要求它仅在达到 inputStream 的末尾时才停止读取。

    我不知道 telnet 协议,但在我看来,您应该从输入流中读取行,例如使用 BufferedReader。一旦从服务器读取一行,就对其进行处理。

    【讨论】:

    • 我没有收到任何字符。 inSream.available() 总是返回 0。
    【解决方案3】:

    我认为不要使用“localhost”,而是使用该特定机器的 IP 地址。

    【讨论】:

    • 与服务器的连接建立成功。无论如何,我尝试了 127.0.0.1 - 没有运气。请注意服务器和客户端都在同一个 Android 设备上工作。
    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 2018-07-10
    • 2014-06-28
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多