如何在Java中将AT命令的输出转换为字符串?
我正在尝试读取AT命令的结果(执行该命令以从控制台对GSM调制解调器执行各种操作)。我已经看到并使用Java
OuputStream类成功进行了测试,以将AT命令的结果作为输出流获取,但是我要做的不是将结果作为输出流获取,而是获取到类中的变量(目前为String)中。
如果有可能喜欢
outStream.write(("Some At command").getBytes());
效果很好,怎么可能做这样的事情
Strign resultOfCommmand=.....result of some AT command;
我正在以这种方式尝试
InputStream is = new ByteArrayInputStream(("some at commamd").getBytes()); String result = getStringFromInputStream(is);
System.out.println("66666666666666666666-----"+result);
/////////////////////
private static String getStringFromInputStream(InputStream is) {
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
String line;
try {
br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
但是为了获得结果,我想要像这样的字符串来获取at命令本身..输出:
66666666666666666666-----AT+CMGR=20
回答:
您必须重组程序中的流,以便从发送AT命令行开始,然后回读
从调制解调器返回的每个响应行,直到获得最终结果代码。有关总体概述,请参见此答案。
首先,要全面了解AT命令,请阅读V.250规范。这将使您成为AT指令专家将大有帮助。
然后对于实际的实现,我不知道codesys,因此以下是处理AT命令应具有的结构的伪代码:
the_modem = openPort();...
// start sending ATE0
writePort(the_modem, "ATE0\r");
do {
line = readLinePort(the_modem);
} while (! is_final_result_code(line))
// Sending of ATE0 command finished (successfully or not)
...
closePort(the_modem);
不管你做什么,永远,永远使用delay,sleep或作为等待最后的结果代码的替代品相似。你可以看一下代码为atinout针对的一个例子is_final_result_code
功能(也可以比较isFinalResponseError
,并isFinalResponseSuccess在ST-Ericsson的U300 RIL
,但请注意,CONNECT
不是最终结果代码,它是一个中间结果码,故得名isFinalResponseSuccess是并非100%正确)。
正确地解析AT命令响应并不那么复杂,以atinout的源代码为例。
以上是 如何在Java中将AT命令的输出转换为字符串? 的全部内容, 来源链接: utcz.com/qa/416233.html