我有一个工作裸金属代码,它使用LWIP2.0.2实现简单的TCP服务器,它运行在Xilinx UltraScale+ Kintex上。
现在我想使用原始api。
守则是:
struct raw_pcb *pcb;
pcb = raw_new_ip_type(IPADDR_TYPE_V4 , 0); //pcb!=null
err = raw_bind (pcb, IP4_ADDR_ANY); //err=0
raw_recv(pcb, raw_recv_callback, NULL);
u8_t raw_recv_callback (void *arg, struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *addr)
{
return 0;
}从一个(非常)简单的windows应用程序中,我尝试连接并得到了一个错误。请您告知:如果使用原始api,在绑定步骤之后是否还应该使用tcp?
如果只使用TCP,则来自远程windows应用程序的连接可以正常工作。
我在https://github.com/tmatsuya/xapp1026.git中发现了很少的示例代码,但它们中没有使用原始api。
提前谢谢你,Zvika
发布于 2020-11-03 21:51:53
lwIP有一个单独的配置库,其中有一个tcpecho_raw示例:https://git.savannah.nongnu.org/cgit/lwip/lwip-contrib.git/tree/apps。
它使用tcp_bind(raw_pcb,.),tcp_listen(raw_pcb)和tcp_accept(raw_pcb,.)在服务器端。
raw_bind()和相关函数用于“实现原始协议多氯联苯,用于不同类型协议的低级别处理,以及(或覆盖)lwIP中已有的协议”。见https://www.nongnu.org/lwip/2_1_x/group__raw__raw.html。
如果您想使用TCP协议,只需使用tcp_*()函数即可。
https://stackoverflow.com/questions/64135968
复制相似问题