uip协议栈服务器,简析UIP协议栈作为服务器/客户端实现TCP/UDP通信的方法

这段代码主要涉及UDP数据包的输入处理。在检查到UDP校验和错误时,会丢弃数据包并记录错误。同时,它管理UDP连接,如果接收到的数据包的源端口或IP地址与已建立的连接不符,会删除旧连接并更新连接信息。如果这是首次接收到特定远端的UDP包,也会创建新的连接,并将本地端口绑定到指定的端口号。整个过程确保了UDP数据包的正确路由和连接的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#if UIP_UDP

/* UDP input processing. */

udp_input:

/* UDP processing is really just a hack. We don't do anything to the

UDP/IP headers, but let the UDP application do all the hard

work. If the application sets uip_slen, it has a packet to

send. */

#if UIP_UDP_CHECKSUMS

uip_len = uip_len - UIP_IPUDPH_LEN;

uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];

if(UDPBUF->udpchksum != 0 && uip_udpchksum() != 0xffff) {

UIP_STAT(++uip_stat.udp.drop);

UIP_STAT(++uip_stat.udp.chkerr);

UIP_LOG("udp: bad checksum.");

goto drop;

}

#else /* UIP_UDP_CHECKSUMS */

uip_len = uip_len - UIP_IPUDPH_LEN;

#endif /* UIP_UDP_CHECKSUMS */

/*******************************添加代码起始***********************************/

if(uip_udp_conn !=0&&(uip_udp_conn->rport!=UDPBUF->srcport

||uip_udp_conn->ripaddr!=UDPBUF->srcipaddr))                                                  //如果是已经连接并且和接收到的端口号或者IP地址不一致

{

uip_udp_remove(uip_udp_conn);                                                                                        //删除连接

uip_udp_conn->rport=UDPBUF->srcport;                                                        //将目的端口设置为收到的远端UDP包的端口

memcpy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr,sizeof(uip_ipaddr_t ));         //将目的IP地址设置为收到的远端UDP包的源IP地址

}

if(uip_udp_conn->rport==0)                                                                                                   //如果首次接收到某个远端UDP包

{

uip_udp_conn->rport=UDPBUF->srcport;                                                //将目的端口设置为收到的远端UDP包的端口

memcpy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr,sizeof(uip_ipaddr_t ));         //将目的IP地址设置为收到的远端UDP包的源IP地址

}

if(uip_udp_conn != 0)

{

uip_udp_bind(uip_udp_conn, HTONS(1999));                                                        //绑定本地端口为LPORT,也就是LPORT-->RPORT 发数据

}

/*******************************添加代码截止***********************************/

/* Demultiplex this UDP packet between the UDP "connections". */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值