【发布时间】:2017-12-14 22:50:23
【问题描述】:
我在尝试将元素添加到 Arduino 应用程序发送的响应流以响应 AJAX 请求时遇到了一个重大问题。我有一条消息成功通过,但是当我向其中添加一个额外的组件时,该消息未被读取。通过使用 Wireshark 监控以太网流量,我确定附加元素没有被完全终止。
我使用的代码是:
void SendTags(EthernetClient cl) {
String value; // stores value read from analog onputs
int count; // index for 'for' loops
int str_length;
char msg_chrs[0];
Serial.println("Debug 395 - sending title and tags");
cl.write("<?xml version = \"1.0\" ?>\r\n");
Str = "<app_data>\r\n";
str_length = Str.length()+1;
Str.toCharArray(msg_chrs, str_length);
cl.write(msg_chrs);
Str = "<tags>\r\n";
str_length = Str.length()+1;
Str.toCharArray(msg_chrs, str_length);
cl.write(msg_chrs);
for (count = 0; count < di_count; count++) {
value = di_sig_tag[count];
Str = "<DI_TAG>" + value + "</DI_TAG>\r\n";
str_length = Str.length()+1;
Str.toCharArray(msg_chrs, str_length);
cl.write(msg_chrs);
}
//(similar code sections omitted for simplicity)
Str = "</tags>\r\n";
str_length = Str.length()+1;
Str.toCharArray(msg_chrs, str_length);
cl.write(msg_chrs);
// Str = "<title>\r\n";
// str_length = Str.length()+1;
// Str.toCharArray(msg_chrs, str_length);
// cl.write(msg_chrs);
// Str = "<pr_name>" + pr_name + "</pr_name>\r\n";
// str_length = Str.length()+1;
// Str.toCharArray(msg_chrs, str_length);
// cl.write(msg_chrs);
// Str = "</title>\r\n";
// str_length = Str.length()+1;
// Str.toCharArray(msg_chrs, str_length);
// cl.write(msg_chrs);
Str = "</app_data>\r\n";
str_length = Str.length()+1;
Str.toCharArray(msg_chrs, str_length);
cl.write(msg_chrs);
Serial.println("Debug 462 - End of SendTags()");
}
在 Wireshark 中,成功传输的元素使用 HTTP 协议显示,并且每个包都有一个元素,每个包都按预期以“\r\n”结尾。:
如果我启用可疑代码,则 HTML 标头为:
带有相关文本的消息部分是:
如您所见,关闭的“>”和终止的“\r\n”没有被传输。我通过剪切和粘贴成功的元素然后进行适当的编辑来生成插入的元素,并且还尝试了String 和char[] 变量的一些排列,但都没有成功。但从 Wireshark 跟踪来看,问题出在 Arduino 代码和以太网链路之间。
任何想法或 cmets 将不胜感激。
【问题讨论】:
-
@JeanPaul98 他问的是关于从服务器发送响应而不是如何在 JavaScript 中处理接收到的响应。
-
msg_chrs数组的长度为 0。您希望在其中放入什么? -
这不是它的工作原理。
Str.toCharArray不会改变数组的长度。越界写入是未定义的行为。 -
不能直接写
Str吗?cl.write(Str);?
标签: javascript ajax arduino ethernet