uIP的udp实现
2013-10-18 10:58
369 查看
#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); }
相关文章推荐
- uIP中UDP协议实现的改进 转载及实现
- uIP中UDP协议实现的改进 转载及实现
- UDP 聊天室实现 经典错误
- Linux UDP 单播 组播 广播实现
- 在Java中实现UDP协议编程(DatagramSocket/DatagramPacket)
- 稳扎稳打Silverlight(54) - 4.0通信之对UDP协议的支持: 通过 UdpAnySourceMulticastClient 实现 ASM(Any Source Multicast),即“任意源多播”
- 稳扎稳打Silverlight(54) - 4.0通信之对UDP协议的支持: 通过 UdpAnySourceMulticastClient 实现 ASM(Any Source Multicast),即“任意源多播”
- 稳扎稳打Silverlight(54) - 4.0通信之对UDP协议的支持: 通过 UdpAnySourceMulticastClient 实现 ASM(Any Source Multicast),即“任意源多播”
- C语言实现UDP打洞
- TCP、UDP套接字编程(简单客户/服务器实现)
- 使用UDP实现聊天功能
- 利用TCP/UDP完成文件传输的设计和实现
- 稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Mult
- VC++ UDP实现可靠传输(文件) UDX协议
- C#实现UDP打洞
- 稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Multicast),即“源特定多播”
- 稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Multicast),即“源特定多播”
- C# UDP编程(通过类UdpClient实现收发)
- 稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Multicast),即“源特定多播”
- 使用JAVA实现Socket通信,TCP、UDP简析。