Java OutputStream/TelnetClient 不能写入超过 1955 个字符的字符串

标签 java telnet apache-commons-net dataoutputstream

我必须创建一个客户端,它从套接字接收请求并将它们发送到我们的 telnet 遗留服务器并返回服务器响应。在我们最近意识到我发送的一些命令在 1955 个字符处被截断之前,它一直运行良好。一切设置的方式是我发送服务器 1 行命令,它发回 1 行响应。我想不出一种方法来通过 TelnetClient 通过 DataOutputStream 发送更长的命令。我做错了吗,或者这只是这些对象之一的限制?

public void connect() {
    try {
        tc = new TelnetClient();
        TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler("VT100", false, false, true, false);
        EchoOptionHandler echoopt = new EchoOptionHandler(true, false, true, false);
        SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true, true, true);
        try {
            tc.addOptionHandler(ttopt);
            tc.addOptionHandler(echoopt);
            tc.addOptionHandler(gaopt);
        } catch (InvalidTelnetOptionException e) {
            ServerConsole.log(e.getMessage());
        }
        tc.connect("192.168.1.8", 2010);
        in = new DataInputStream(tc.getInputStream());
        out = new DataOutputStream(tc.getOutputStream());
        login();
    } catch (IOException ex) {
        ServerConsole.log(ex.getMessage());
    }
}

//This is a watered down version of my write method just to show the basic idea of whats happening
public String write(String command) {
    String finalCommand = command+"\n";
    byte[] comm = finalCommand.getBytes();
    out.write(comm);
    out.flush();
    response = in.readLine();
    response = in.readLine();
    return response;
}

最佳答案

我不知道这些对象,但你为什么不在消息的开头放一个字符,表示这是否是消息的结尾。因为发送一个巨大的字符串看起来不太安全。

示例:字符“E”表示结束,字符“N”表示未结束。

因此您的客户端可以继续接收消息并将它们连接成一个大字符串,同时它没有接收到带有字符“E”的消息。

例子: 正在接收……“NTheWorld……” 创建一个字符串“strMessage”; 正在接收...“NBurYesterday...” 将 receivedMessage 与 strMessage 连接起来; 正在接收...“NTodayApple...” 将 receivedMessage 与 strMessage 连接起来; 正在接收...“ETheEnd” 字符串完成,我执行接下来的操作。

(抱歉拼写错误)

关于Java OutputStream/TelnetClient 不能写入超过 1955 个字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28769189/

相关文章:

java - 标记化后列表中的空白

java - 将消息存储到变量 RabbitMQ Java

java - 加速递归列出 FTP 文件

java - FTP客户端可以控制FTP服务器超时设置吗?

java - java中的阻塞(同步)ftp下载?

java - Thymeleaf,无法访问参数

c++ - 从远程服务器接收垃圾字符?

c# - 如何使用 C# 应用程序连接到 telnet 的 tcp 端口 23?

Android:如何远程登录电话?

java - Scala:在 Scala 中使用来自 Java 的多个构造函数