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

#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". */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值