Uip在STM32平台移植之建立UDP链接
2015-12-15 10:33
633 查看
在STM32上通过建立UDP连接实现数据的传输。在上节提到采用的是轻型的TCP/IP协议栈Uip,在Uip协议中实现UDP连接的创建,需要以下步骤:
第一步,打开支持UDP协议的配置项,支持的UDP连接的个数,参考上节的配置文件。
第二步,确定本地的IP地址和端口号(192.168.0.100 9999),远程主机的IP地址和端口号(192.168.0.22 9998)
#define IP_ADDR1 192
#define IP_ADDR2 168
/#define IP_ADDR3 3
/#define IP_ADDR4 100
#define UDP_REMOTE_PORT 9998
#define UDP_LOCAL_PORT 9999
第三步,UDP创建连接初始化,
void Udp_Init(void)
{
uint8_t i = 0;
uip_ipaddr_t ipaddr;
for(i = 0; i< UIP_UDP_CONNS; i++)
{
if(&uip_udp_conns[i] != NULL)
{
uip_udp_remove(&uip_udp_conns[i]);
}
}
//创建UDP连接
uip_ipaddr(ipaddr,192, 168, 0, 22);
uip_udp_conn = uip_udp_new(&ipaddr, HTONS(UDP_REMOTE_PORT));
//绑定本地端口
if(uip_udp_conn != NULL)
{
uip_udp_bind(uip_udp_conn, HTONS(UDP_LOCAL_PORT));
}
}
将此UDP初始化函数,放在uip协议栈初始化之后。
UDP应用层数据处理函数的实现
#ifndef UIP_UDP_APPCALL
#define UIP_UDP_APPCALL Udp_Appcall
#endif
void Udp_Appcall(void)
{
uint32_t i ;
u8 strloadlen = 0;
uip_ipaddr_t ipaddr;
u8 targetIp[4], netMask[4], gateway[4], macaddr[6],netip[4];
char
netMaskbuff[16], macaddrbuff[20],gatewayBuf[16];
memset(str,0,100);
udpip_buf = (struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN];
udp_datelen = (udpip_buf->len[0] << 8) + udpip_buf->len[1] - UIP_IPUDPH_LEN;//HTONS(udpip_buf->len);
udp_appbuf = (char *)uip_appdata;
memcyp(str,udp_appbuf,udp_datelen);
myudp_send(str,strlen(str));
}
根据需要,实现对数据的处理,编译完成后,下载值目标板,复位。
第四步,将所使用的PC机的IP地址设置成192.168.0.22,打开网络调试助手,将协议类型设置为UDP,本地端口号设置成 UDP_REMOTE_PORT,点击连接,即可创建UDP连接,此时即可通过在网络助手,向目标板发送UDP数据包。
第一步,打开支持UDP协议的配置项,支持的UDP连接的个数,参考上节的配置文件。
第二步,确定本地的IP地址和端口号(192.168.0.100 9999),远程主机的IP地址和端口号(192.168.0.22 9998)
#define IP_ADDR1 192
#define IP_ADDR2 168
/#define IP_ADDR3 3
/#define IP_ADDR4 100
#define UDP_REMOTE_PORT 9998
#define UDP_LOCAL_PORT 9999
第三步,UDP创建连接初始化,
void Udp_Init(void)
{
uint8_t i = 0;
uip_ipaddr_t ipaddr;
for(i = 0; i< UIP_UDP_CONNS; i++)
{
if(&uip_udp_conns[i] != NULL)
{
uip_udp_remove(&uip_udp_conns[i]);
}
}
//创建UDP连接
uip_ipaddr(ipaddr,192, 168, 0, 22);
uip_udp_conn = uip_udp_new(&ipaddr, HTONS(UDP_REMOTE_PORT));
//绑定本地端口
if(uip_udp_conn != NULL)
{
uip_udp_bind(uip_udp_conn, HTONS(UDP_LOCAL_PORT));
}
}
将此UDP初始化函数,放在uip协议栈初始化之后。
UDP应用层数据处理函数的实现
#ifndef UIP_UDP_APPCALL
#define UIP_UDP_APPCALL Udp_Appcall
#endif
void Udp_Appcall(void)
{
uint32_t i ;
u8 strloadlen = 0;
uip_ipaddr_t ipaddr;
u8 targetIp[4], netMask[4], gateway[4], macaddr[6],netip[4];
char
netMaskbuff[16], macaddrbuff[20],gatewayBuf[16];
memset(str,0,100);
udpip_buf = (struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN];
udp_datelen = (udpip_buf->len[0] << 8) + udpip_buf->len[1] - UIP_IPUDPH_LEN;//HTONS(udpip_buf->len);
udp_appbuf = (char *)uip_appdata;
memcyp(str,udp_appbuf,udp_datelen);
myudp_send(str,strlen(str));
}
根据需要,实现对数据的处理,编译完成后,下载值目标板,复位。
第四步,将所使用的PC机的IP地址设置成192.168.0.22,打开网络调试助手,将协议类型设置为UDP,本地端口号设置成 UDP_REMOTE_PORT,点击连接,即可创建UDP连接,此时即可通过在网络助手,向目标板发送UDP数据包。
相关文章推荐
- MiniUI——表格分组
- 让UIView窄斜
- 187. Repeated DNA Sequences (String; Bit)
- pt-query-digest查询日志分析工具
- easyui combotree 异步加载节点 默认值 问题
- 记录错误:'command '/.../sdk/build-tools/23.0.1/aapt'' finished with non-zero exit value 1
- easyUI在可编辑的datagrid中计算两列的值
- Java GUI入门教程
- 应用Druid监控SQL语句的执行情况
- UIViewContentMode各类型效果
- Querying JSON
- ORA-12520: TNS:listener could not find available handler for requested type of server
- 详解iOS开发中UItableview控件的数据刷新功能的实现
- Arduino - 改装车库门,增设手机蓝牙控制功能
- ios UITableview 刷新某一个cell 或 section
- 《UIPageControl 的创建和 自定义和引导页的使用》
- iOS9 新增 UIStackView 官方文档翻译
- iOS UIScrollView 没有从顶部开始滑动
- Arduino - Micro SD卡 读写
- 298. Binary Tree Longest Consecutive Sequence