stm32 网络编程
来源:互联网 发布:阿里郎兰花指mp3百度云 编辑:程序博客网 时间:2024/06/10 04:49
//udp初始化void udp_server_init(void){ err_t err; IP4_ADDR(&ipaddr_host,IP_1,IP_2,IP_3,IP_4); /* Create a new UDP control block */ serv_pcb = udp_new(); if (serv_pcb) { /* Bind the upcb to the UDP_PORT port */ /* Using IP_ADDR_ANY allow the upcb to be used by any local interface */ err = udp_bind(serv_pcb, IP_ADDR_ANY, UDP_SERVER_PORT); if(err == ERR_OK) { /* Set a receive callback for the upcb */ udp_recv(serv_pcb, udp_server_callback, NULL); } else { printf("can not bind pcb"); } } else { printf("can not create pcb"); } printf("* @ udp_server is initialized \r\n");}/** * @brief This function is called when an UDP datagrm has been received on the port UDP_PORT. * @param arg user supplied argument (udp_pcb.recv_arg) * @param pcb the udp_pcb which received data * @param p the packet buffer that was received * @param addr the remote IP address from which the packet was received * @param port the remote port from which the packet was received * @retval None *//////////////////////////////////////////服务器接收线程void udp_server_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port){//#ifdef Show_Host_IP __IO uint8_t iptab[4]; /* read its IP address */ iptab[0] = (uint8_t)((uint32_t)(addr->addr) >> 24); iptab[1] = (uint8_t)((uint32_t)(addr->addr) >> 16); iptab[2] = (uint8_t)((uint32_t)(addr->addr) >> 8); iptab[3] = (uint8_t)((uint32_t)(addr->addr)); //printf("is: %d.%d.%d.%d ", iptab[3], iptab[2], iptab[1], iptab[0]); //#endif memcpy((void *)&buff,p->payload,p->len); pushrecv(buff,p->len); /* size=getrecv(dd); qq = pbuf_alloc(PBUF_TRANSPORT, size, PBUF_RAM); qq->payload =(void*)dd; udp_connect(upcb, addr, 1000); udp_send(upcb, qq); udp_disconnect(upcb); pbuf_free(qq); */ pbuf_free(p);}/** * @brief Push net recieve into buffer * @param None * @retval None *//////////////////////////////////////////////数据入栈void pushrecv(char * recv,uint16_t size){ if(size >0) { memcpy(&(m_recvbuf[m_bufwritep].buff),recv,size); m_recvbuf[m_bufwritep].size=size; m_bufwritep++; m_bufsize++; if(m_bufsize==NETBUFSIZE) { m_bufwritep=1; m_bufsize=1; m_bufreadp=0; } }}/** * @brief Get net recieve from buffer * @param None * @retval None *//////////////////////////////////////////////接收数据uint8_t getrecv(char * recv){ uint8_t size; if (m_bufsize>0) { size=m_recvbuf[m_bufreadp].size; memcpy(recv,&(m_recvbuf[m_bufreadp].buff),size); m_bufreadp++; if(m_bufreadp>=m_bufwritep) { m_bufwritep=0; m_bufsize=0; m_bufreadp=0; } } else { size=0; recv=NULL; } return size;}///////////////////////////////////////////////客户端发送uint16_t udp_client_send(char * send,uint16_t size){ struct pbuf *q; q = pbuf_alloc(PBUF_TRANSPORT, size, PBUF_RAM);// printf("pbuf_alloc :%x size:%d\r\n",(int)q,size); q->payload =(void*)send; // printf("udp_sendto :%x ipaddr_host:%x\r\n",(int)serv_pcb,(int)&ipaddr_host); udp_sendto(serv_pcb,q,&ipaddr_host,UDP_CLIENT_PORT); /* Free the p buffer */ pbuf_free(q); return size;}
0 0
- stm32 网络编程
- STM32编程
- stm32的flash编程
- STM32 ISL1208编程
- stm32编程方法
- STM32正交编码器编程
- STM32编程相关笔记。
- STM32 UART编程
- STM32高效编程
- stm32 adc编程
- STM32寄存器编程思路
- Linux + STM32编程环境
- STM32 Systick 编程及应用
- stm32 编程用到的文档
- stm32 编程用到的文档
- STM32 Systick 编程及应用
- STM32 IAP的bootloader编程
- STM32编程中的一些感想
- 继承
- 通过“D语言解析wav音频文件”来看C++向D代码的迁移
- UVA_10020_Minimal coverage
- 剑指offer之编程(二)
- Annotation(注解)代替web.xml完成servlet配置
- stm32 网络编程
- 【译】velocity
- linux服务器 NFS挂载
- 《战拖有术》读书笔记(IIX)
- C4.5决策树-为什么可以选用信息增益来选特征
- MyEclipse 导入的项目WEB-INF文件夹变成包的解决方案
- [待完成]移动端SO加固-简单梳理[待完成]
- 带你实现开发者头条APP(四)---首页优化(加入design包)
- 经验总结