
我在做一个http通讯项目。目标是通过以太网链路在PIC18F67j60微控制器( PIC18启动以太网模块)和主机之间交换http数据(例如JSON数据)。计算机充当客户端,PIC18充当服务器。我正在用C语言进行MPLABX编程。我还使用Wireshark对PIC和计算机之间交换的帧进行了精确的检查。我已经成功地在PIC18和主机之间建立了TCP连接(我可以在Wireshark上看到它,它正确地显示了3路握手过程)。为了简单起见,下面是我如何测试http通信:我运行firefox,并在上面键入:"@IP of my microcontroller : Port number“。因此,这需要firefox发送一个http GET请求("GET /1.1.“),然后我的微控制器通过发送"HTTP/1.1 200 OK .”进行接收和应答。到火狐。我肯定能看到这个答复("HTTP/1.1 200 OK .“)在wireshark上,它表明从PIC18发送的应答帧是http类型(见下图)。但是,看起来Firefox似乎不想显示数据内容(JSON数据),而是发送一个我完全不理解的TCP保持活动请求。知道为什么火狐不想显示JSON数据,而是继续发送TCP保持活动请求吗?还是我在http交换中遗漏了什么?。PS :对于那些可能不知道的人,wireshark可以分析框架并指出这些帧正在发生的问题,因此一条彩色的线条(见下图)与特定类型的问题相关联。更准确地说,从Wireshark的说法来看,紫色的线条与“坏TCP : TCP.analysis.flags"问题有关。谢谢你的帮助。

发布于 2020-08-28 12:45:50
如果要在浏览器中将数据显示为文本,则需要在Content-Type头中使用正确的值。目前,您使用的是对浏览器没有固有意义的application/json,即它不知道如何显示这些数据。相反,您需要使用Content-Type of text/plain。
除此之外,您似乎使用了一些损坏的HTTP堆栈。它没有指定响应体的大小(使用Content-length),但也不会在发送响应后关闭连接。这意味着当响应完成时,客户端(Firefox)是未知的,它会一直等待,而不会显示任何内容。
https://stackoverflow.com/questions/63629415
复制相似问题