This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/F28M35M52C:enet_UIP 和 enet_lwip 示例在 Safari 中不起作用

Guru**** 2584095 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/651355/compiler-f28m35m52c-enet_uip-and-enet_lwip-examples-does-not-work-in-safari

器件型号:F28M35M52C

工具/软件:TI C/C++编译器

你好

我正在使用名为“enet_uIP”(和“enet_lwip”,其网页与 enet_uIP 相同)的 lwip 示例作为 Concerto 器件, 它使用网页的简单示例向 ARM M3发送消息、以打开/关闭 LED、还接收有关 LED 状态的消息。 我在更复杂的网络开发中遇到了同样的问题。

当我使用时、网页在 iMac 中工作正常、例如 Crome、以及基于 Windows 的计算机。 但是、当我在 iMac 中使用 Safari、而在任何其他 Apple 设备(iPhone 或 iPad)中都不能正常工作。

我已经做了一些研究,结果发现问题显然是在从网页到 ARM M3的传出消息中使用“http.send(null)”,其中“http = new XMLHttpRequest();”。

JavaScript 代码在网页本身内工作正常、按钮在网页内工作、但在向 ARM 发送消息时、从未向 Concerto 发送消息(在任何 Apple 设备中使用 Safari)。

集成在 Safari 中的 Web Inspector 会发出以下警告:"Failed to load resource:the network connection was lost (加载资源失败:网络连接丢失)"。

我已经研究了问题,发现:“Chrome & Firefox 只显示收到的任何内容,而不用担心内容长度不匹配。 Safari,从 Mavericks 10.9上的 Safari 7.0开始,响应更加严格,并将不匹配视为“加载资源失败”错误。

https://apple.stackexchange.com/questions/106550/safari-7-0-cannot-load-localhost

由于我没有像在这个链接中那样使用"WEBrick"、请有任何建议来解决这个问题、还有一些权变措施?

我是否应该更改任何 UIP - lwIP 选项?

谢谢你。

Dionisio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Dionisio、

    我 目前没有 Mac 计算机来重现此问题、因此我需要更多信息才能为您提供帮助。

    1.请确认我的理解是否正确:

    网页 在 Safari 中正确呈现(就像在 Chrome 上一样)。 仅当您单击某个按钮(用于切换 LED 或发送数据)时、才会出现此问题。

    2.在使用"enet_lwip"项目时是否看到同样的问题? 或者它是否特定于"enet_uIP"?

    3.您是如何得出数据/命令无法到达协奏器件的结论的?

    4.您发现"内容长度不匹配"的 Safari 发送的命令是什么?

    此致、

    Sudhakar Singh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好
    下面我回答您的问题:

    1.请确认我的理解是否正确:

    网页在 Safari 中正确呈现(就像在铬上一样)。 仅当您单击某个按钮(用于切换 LED 或发送数据)时、才会出现此问题。

    是的、网页已正确加载到 Safari 中。 但是、按钮不起作用。
    在本网页的进一步发展过程中、我已检查按钮是否在网页内工作、即只要不需要向 M3发送任何消息、它们就可以更改网页内的内容。

    2.在使用"enet_lwip"项目时是否看到同样的问题? 或者它是否特定于"enet_uIP"?

    问题出在 Enet-UIP 提供的网页上。 我尝试将其与 enet_lwip 结合使用、得到的结果相同。

    3.您是如何得出数据/命令无法到达协奏器件的结论的?

    通过观看 Code Composer 中的"Expresion"窗口、我发现这些消息没有到达 M3。

    我有几个变量、当我使用 Safari 按下按钮时、它们不会更新、但当我使用带有任何浏览器的 PC 时、它们会更新。

    4.您发现"内容长度不匹配"的 Safari 发送的命令是什么?
    命令为:
    http.open (\"get\"、\"cmd?=\"+ input + v1.value +\"&id\"+ Math.random ()、true);
    我还尝试了:
    http.open ('get'、'cmd?='+'c1'+'&id'+ Math.random ()、true);


    事实上,我认为问题在以下几个方面:
    "if (window.XMLHttpRequest)"
    "{"}
    "HTTP =新的 XMLHttpRequest();"
    "}"
    "else if (window.ActiveXObject)"
    "{"}
    "HTTP =新的 ActiveXObject (\"Microsoft.XMLHTTP\");"
    "}"
    "如果(http)"
    "{"}
    "HTTP.open (\"get\"、\"cmd?=\"+ input + v1.value +\"&id\"+ Math.random ()、true);"
    "HTTP.onreadystatechange = Rcv;"
    " http.send(null);"
    "}"

    Safari 不支持 XMLHttpRequest 对象、或者 http.open 字段或 http.send(null 中存在错误、则不能在 Safari (在任何 Apple 设备中)中工作。

    谢谢你
    Dionisio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    我出错了:M3收到了 Safari 中加载的网页发送的消息。

    我已将接收到的消息存储在数组中以进行监视、结果如下:(参见下图)。

    但是、Safari 不接收 UIP 或 lwIP 发送的文本消息、因此问题似乎出在用于发送消息的 C 代码或代码中:

       "if (http.readyState == 4)"
       "{"}
       "if (http.status =200)"
       "{"}
       "resp = http.responseText;"

    属于网页。

    Dionisio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    今天,我可以肯定地说,问题是由于使用 Safari 时,永远不会到达 http.status=200行。

    例如,使用 Firefox 和代码:

    "HTTP.onreadystatechange = Rcv;"

      "if (http.readyState == 4)"

      "{"}

      "if (http.status =200)"

      "{"}

      "resp = http.responseText;"

      "警报(RESP);"

    在生成的文本框中可以正确获取 M3发送的文本。

    但是、在 Safari 中、(覆盖代码行"if (http.status == 200)"、因为它从未到达):

    "HTTP.onreadystatechange = Rcv;"

    (笑声)

      "if (http.readyState == 4)"

      "{"}

      "if (http.status =200)"

      "{"}

      "resp = http.responseText;"

      "警报(RESP);"

    在文本框中仅获取空白数组。

    由于状态代码= 200在通过 HTTP 访问文件或资源时出现、没有任何问题、代码200具体表示 URL/URI 指向已成功加载并传递到计算机的有形资源、 因此,很明显,在 microIP 中的 UIP_SEND 和 lwIP 中的 SEND_DATA()创建了错误的数据包 ,或者 Safari 未正确读取数据包。

    Dionisio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    此示例似乎未使用此设置(即使用 Safari 浏览器)进行测试。 正如您指出  的、浏览器可能无法很好地执行 enet_uIP 代码。

    您可能需要查看 enet_uIP 项目中的"httpd.c"文件以了解如何 处理 http 请求。 正如我说过的、这可能尚未在所有浏览器中进行测试、因为这只是一个示例代码。

    建议您在 PC 上使用此示例。

    谢谢、

    Sudhakar