微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

lwip 2.0.2:使用原始api的TCP服务器

如何解决lwip 2.0.2:使用原始api的TCP服务器

我有一个有效裸机代码,该代码使用lwip 2.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 API吗?

如果仅使用TCP api,则来自远程Windows应用程序的连接可以正常工作。

我在https://github.com/tmatsuya/xapp1026.git中发现很少的示例代码 但是他们都不在使用原始api。

先谢谢您, 兹维卡

解决方法

lwIP有一个单独的contrib存储库,其中有一个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中已经可用的协议之外,还可以使用原始协议PCB来对不同类型的协议进行低级处理。”参见https://www.nongnu.org/lwip/2_1_x/group__raw__raw.html

如果要使用TCP协议,只需使用tcp _ *()函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。