无法从套接字响应中读取换行/回车



我正在通过telnet连接向TP-LINK无线路由器发送设置命令:

Trying 1.2.3.4...
Connected to 1.2.3.4.
Escape character is '^]'.
*HELLO*$$$
CMD
factory RESET
factory RESET
Set Factory Defaults
<4.00> set sys autoconn 0
set sys autoconn 0
AOK
<4.00>
...

我有一个PHP代码,执行命令的发送,并获得使用套接字的响应:

socket_write($socket, "factory RESETr"); // send command
$response = socket_read($socket, 256); // get response

PHP工作正常。$response变量包含:

factory RESET
Set Factory Defaults

但是使用Java我有问题。使用BufferedReader对象来读取响应,我可以获得第一行内容。但是我找不到以下行:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// ...
bw.write("factory RESET");
bw.newLine();
bw.flush();
// ...
StringBuilder sb = new StringBuilder();
String s;
while ((s = br.readLine()) != null) {
   sb.append(s);
}

我可以得到第一行内容,但第二次读取不继续,也没有引发异常…如果我使用read函数,则只返回第一行:

char[] buffer = new char[256];
br.read(buffer, 0, 256);
String response = new String(buffer); // response is "factory RESET"

有什么问题吗?

  1. 你的PHP代码执行两次读取。Java代码尝试读取直到流结束,这只会在对等端关闭连接时发生。

  2. Telnet协议中的行分隔符定义为rn,除非您使用的是二进制模式,但实际上不是二进制模式。不像rBufferedWriter在你的平台上做的那样。

相关内容

  • 没有找到相关文章

最新更新