簡體   English   中英

無法讀取套接字響應中的換行符/回車符

[英]Cannot read line break/carriage return from socket response

我正在通過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 RESET\r"); // 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協議中的行分隔符定義為\\r\\n ,除非您使用的不是二進制模式。 不像\\rBufferedWriter在您的平台上可能做的任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM