Curl 微芯片TCP客户端与微芯片TCP服务器对话

Curl 微芯片TCP客户端与微芯片TCP服务器对话,curl,tcp,server,client,microchip,Curl,Tcp,Server,Client,Microchip,我已经研究了一遍又一遍,这是我对我喜欢的网站的第一个问题。我有一个基于微芯片的服务器/客户端,要求从另一个相同版本的微芯片TCP服务器获取网页 我有一个开发板向另一个开发板请求一个网页,通过wire shark,可以看到通信,并且可以看到GenericTCPClient.c代码中只使用了ARP广播。它可以工作,但WireShark通信看起来与CURL或通用web浏览器请求的信息不同 无论是在我面前,还是芯片代码(客户端)都不支持我认为应该支持的内容。我在读RFC的时候就已经从头开始写FTP和电子

我已经研究了一遍又一遍,这是我对我喜欢的网站的第一个问题。我有一个基于微芯片的服务器/客户端,要求从另一个相同版本的微芯片TCP服务器获取网页

我有一个开发板向另一个开发板请求一个网页,通过wire shark,可以看到通信,并且可以看到GenericTCPClient.c代码中只使用了ARP广播。它可以工作,但WireShark通信看起来与CURL或通用web浏览器请求的信息不同

无论是在我面前,还是芯片代码(客户端)都不支持我认为应该支持的内容。我在读RFC的时候就已经从头开始写FTP和电子邮件程序了,所以如果需要的话,我不想也不需要知道通过套接字的低级请求

另外,如果网页有用户名和密码。。。即。。。微芯片客户端似乎不支持这一点,除非我看不到曙光

如果需要更改低级命令,请使用演示GenericTCPClient.c中的简单示例,如下所示

        // Place the application protocol data into the transmit buffer.  For this 
        // example, we are connected to an HTTP server, so we'll send an HTTP GET 
        // request.
        TCPPutROMString(MySocket, (ROM BYTE*)"GET ");
        TCPPutROMString(MySocket, RemoteURL);
        TCPPutROMString(MySocket, (ROM BYTE*)" HTTP/1.1\r\nHost: ");
        TCPPutString(MySocket, ServerName);
        TCPPutROMString(MySocket, (ROM BYTE*)"\r\n\r\n");

        // Send the packet
        TCPFlush(MySocket);
        GenericTCPExampleState++;
我使用了CURL的debug verbose特性,看到了它发送的内容,也看到了通过wireshark进行的通信,以及使用generic browser进行的通信,但是在GenericTCpCLient.c中,使用CURL中相同的低级命令,似乎无法获得类似的结果

因此,使用通过CURL或通用web浏览器捕获的命令作为“GET”命令,从Microchip TCP客户机抓取网页到Microchip服务器,不会显示相同的结果

c只使用ARP广播,但希望使用与CURL相同的命令

我错过什么了吗?CURL的工作非常棒,但是尝试在GenericTCPClient.c中使用相同的命令似乎不会产生相同的结果。。。尤其是在URL中使用了用户和密码

所以在坚果壳里。。。Microchip GenericTCPCLient.c,从Microchip TCP服务器请求网页,Wireshark显示ARP广播,而CURL和任何WEB浏览器显示正确的方式


谢谢你的反馈或对其他类似帖子的指点。当我被难倒时,这是我最喜欢的地方。

使用交换机很难看到从一个嵌入式设备到另一个嵌入式设备的以太网流量。出于这个原因,我的办公桌上有一个以太网集线器。交换机将仅将业务路由到具有终端设备的特定端口;集线器将复制所有端口上的所有数据

PC(和Wireshark)之所以能看到ARP广播,是因为它是一种广播。交换机正在将该数据包发送到所有端口。如果TCP服务器正在响应,它将绕过PC(和Wireshark)直接响应TCP客户端

我的建议是在电脑上安装一个web服务器。调试试图从电脑获取页面的TCP客户端。您可以运行Wireshark,它将显示所有交互

接下来,使用PC的web浏览器调试TCP服务器。同样,Wireshark将能够显示所有数据

最后,调试两个嵌入式设备之间的通信

HTTPHeaderParseAuthorization函数可能包含用户名和密码。查找HTTP\u使用\u身份验证。

已解决。。。 在阅读RFC 1945第11.1节之后,我发现我需要将“用户名:密码”编码为base 64。然后向套接字提供和额外的参数。直到进一步研究,我才知道这一点。我想我需要传递用户:传入URL(比如在web浏览器或cURL命令行中),而不是作为套接字的额外参数。 即。htttp://user:pass@192.168.1.X/webpage.htm

TCPPutROMString(MySocket,(ROM字节*)“授权:基本QWXHZGRPPBJPCGVUIHNLC2FTZQ==”; Auth代码是从苹果开源base_64转换生成的,我从另一个线程中找到了这个转换,通过传入字符串“username:password”并将base64结果传递到套接字中。


至于结果与使用cURL或web浏览器不同。他们都使用了在wireshark中显示为绿色的TCP命令。使用微芯片客户端显示为从客户端ip地址到服务器ip地址的ARP广播。i、 e.192.168.1.11至192.168.1.10广播。

您是否将http和tcp/ip严重混淆?这是一种可能性。使用TCPPutROMString(MySocket,(ROM字节*)“HTTP/1.1\r\nHost:”)时;其余我认为需要的,从调试详细模式下的CURL,我似乎没有从使用wireshark得到相同的结果。Wireshark显示了不同颜色编码的流量,从使用CURL加载网页,然后在Microchip TCPClient中使用相同的命令到Microchip TCPServer。请了病假,直到下周我才拿到所有工具来显示wireshark的CURL响应,与wireshark的Microchip TCPClient响应相比。基本上,我使用了CURL在调试模式下的逐行响应,并输入了Microchip TCPClient代码中使用的相同命令。从wireshark的流量方面得到了不同的结果。你看到了什么结果?你期望得到什么样的结果?告诉我们结果“不同”并没有真正的帮助。