【发布时间】:2015-04-30 09:47:52
【问题描述】:
我必须创建一个客户端,它从套接字接收请求并将它们发送到我们的 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;
}
【问题讨论】:
-
你试过类似
out = new DataOutputStream(new BufferedOutputStream(tc.getOutputStream(), BIG_NUMBER_HERE));吗? -
刚试过,我的命令在 1955 个字符处仍然被截断
-
那么这可能是
TelnetClient中的缓冲区的问题。该类扩展了SocketClient,因此您可以使用tc.setReceiveBufferSize(BIG_NUMBER_HERE);和tc.setSendBufferSize(BIG_NUMBER_HERE);。 -
我认为这不再是客户端的问题了。有关详细信息,请参阅我的答案。这不是一个真正的解决方案,但我希望能够发布我用来测试的客户端和服务器代码。
标签: java telnet apache-commons-net dataoutputstream