首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从套接字响应读取换行/回车

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

Stack Overflow用户
提问于 2015-08-27 21:22:56
回答 1查看 1.5K关注 0票数 1

我通过telnet连接向TP链路无线路由器发送安装命令:

代码语言:javascript
复制
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代码,它执行命令的发送并使用套接字获取响应:

代码语言:javascript
复制
socket_write($socket, "factory RESET\r"); // send command
$response = socket_read($socket, 256); // get response

PHP工作得很好。$response变量包含:

代码语言:javascript
复制
factory RESET

Set Factory Defaults

但是使用Java我有问题。使用BufferedReader对象读取响应,我可以获得第一行内容。但我无法理解以下几句话:

代码语言:javascript
复制
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函数,则只返回第一行:

代码语言:javascript
复制
char[] buffer = new char[256];
br.read(buffer, 0, 256);
String response = new String(buffer); // response is "factory RESET"

有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 23:58:23

  1. PHP代码执行两次读取。您的Java代码尝试读取到流的末尾,这只有在对等方关闭连接时才会发生。读一遍。
  2. Telnet协议中的行分隔符被定义为\r\n,除非您使用的是二进制模式,而不是二进制模式,而不是\rBufferedWriter在您的平台上可能做的任何事情。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32259656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档