uIP的udp实现

#ifndef __UDPDEMO_H__
#define __UDPDEMO_H__

//定义应用程序回调函数 
#ifndef UIP_APPCALL  
     #define UIP_APPCALL                 uip_appcall  
#endif  
#ifndef UIP_UDP_APPCALL  
     #define UIP_UDP_APPCALL              myudp_appcall  
#endif 
#endif

#include "stdio.h"
#include "stm32f10x.h"
#include "uip.h"
#include "udpdemo.h"  
 struct uip_udp_conn *myudp_conn;
void myudp_init(void)
{
    uip_ipaddr_t ipaddr;//定义IP类型变量
    uip_ipaddr(ipaddr, 10,24,1,188);   //远程IP为192.168.1.116
    if(myudp_conn != NULL) 
    {
      uip_udp_remove(myudp_conn);//如果连接已经建立,则删除之
    }
   
    myudp_conn = uip_udp_new(&ipaddr, HTONS(1000));//建立到远程ipaddr,端口为1000的连接
    if(myudp_conn != NULL) 
    {
        uip_udp_bind(myudp_conn, HTONS(2000));//绑定本地端口为2000,也就是2000-->1000 发数据
    }
}

void myudp_send(char *str,short n)
{
   char   *nptr;  
   nptr = (char *)uip_appdata;      
   memcpy(nptr, str, n);
   uip_udp_send(n);   //发送n个数据
}
void newdata()
{
    char   *nptr;
    short len;
    len = uip_datalen();//读取数据长度
    nptr = (char *)uip_appdata; //取得数据起始指针
    if(len<4){
		myudp_send("Please check the command!\n",26);
	}else if(strncmp(nptr,"getname",7)==0){
		myudp_send("My name is Johnny.\n",19);
    }else {
		myudp_send("Unkown command!\n",16);
	}
}
/*---------------------------------------------------------------------------*/
/** \internal
* The main UDP function.
*/
/*---------------------------------------------------------------------------*/
void myudp_appcall(void)
{
   if(myudp_conn->rport == HTONS(1000))//这个地方可能欠妥,不是检查的myudp的端口,
//而是检查uip_udp_conn->rport,这个uip_udp_conn是全局变量
   {
     /*if(uip_poll()) {
       myudp_send("hello\n",6);//定时时间到,发hello
     }*/
     if(uip_newdata()) //如果指定IP的指定端口发来数据
     {
       newdata();  //这个里面就是处理接收到的数据的   
     }
   }
}

void uip_appcall(void){

}
//最后需要定义一个宏
//#define UIP_UDP_APPCALL myudp_appcall
//放在uip.h
//打印日志用
void uip_log(char *m)
{			    
	printf("uIP log:%s\r\n",m);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值