uip udp遇到的问题,求助开发过udp的朋友圈轻松筹求助案例

uip UDPclient模式通信移植,p本地ort可以是无规
时间: 20:37:28
&&&& 阅读:57
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
现在移植UDPclient模式,使用广播地址检测.
//udp_client.c
/*************************************************************************************************************
* 文件名称:
udp_client.c
uIP UDP客户端相关函数
* 创建时间:
* 最后改动时间:
UDP客户端相关函数
*************************************************************************************************************/
#include &SYSTEM.h&
#include &uip.h&
#include &string.h&
#include &stdio.h&
#include &uIP_user.H&
#include &AppClient.H&
#include &udp_client.h&
static struct uip_udp_conn *myudp_
u16 UDP_ClientPort = UDP_LOCAL_PORT;
//UDP本地port
UIP_USER udp_
//UDP 客户端数据结构
/*************************************************************************************************************************
: bool udp_client_reconnect(u8 IpAddr0,u8 IpAddr1,u8 IpAddr2,u8 IpAddr3, u16 ServerPort, u16 ClientPort)
: 建立一个UDP客户端
: IpAddr:UDPserverIP地址;ServerPort:ClientPort:客户端本地port
: FALSE:失败;TRUE:成功
* 最后改动时间 :
server必须指定port,客户端port为0则为随机port
*************************************************************************************************************************/
bool udp_client_reconnect(u8 IpAddr0,u8 IpAddr1,u8 IpAddr2,u8 IpAddr3, u16 ServerPort, u16 ClientPort)
uip_ipaddr_
uip_ipaddr(ipaddr, IpAddr0,IpAddr1,IpAddr2,IpAddr3);
//UDPserverIP地址
if(myudp_conn != NULL)
uip_udp_remove(myudp_conn);
//假设连接已经建立,则删除之
myudp_conn = uip_udp_new(&ipaddr, htons(ServerPort), ClientPort);//建立到远程ipaddr
if(myudp_conn != NULL)
//连接建立成功
udp_client.RxLen = 0;
udp_client.TxLen = 0;
UDP_ClientPort = HTONS(myudp_conn-&lport);
//本地port
udp_client.ClientPort = UDP_ClientP
udp_client.ServerPort =
HTONS(myudp_conn-&rport);
uart_printf(&UDP 建立成功!本地port:%d serverport:%d\r\n&,udp_client.ClientPort, udp_client.ServerPort);
uip_udp_bind(myudp_conn, htons(UDP_ClientPort));
//绑定本地port
return TRUE;
else//连接建立失败
UDP_ClientPort = 0;
//本地port
udp_client.ClientPort = 0;
udp_client.ServerPort =
uart_printf(&UDP 建立失败!\r\n&);
return FALSE;
/*************************************************************************************************************************
: void udp_client_appcall(void)
: UDP 客户端应用回调函数
* 最后改动时间 :
*************************************************************************************************************************/
void udp_client_appcall(void)
if (uip_newdata())
if(uip_datalen() & UIP_RX_BUFF_ZISE) uip_len = UIP_RX_BUFF_ZISE;//大小限制
memcpy(udp_client.RxBuff, uip_appdata, uip_len);
//复制接收的数据到接收缓冲区
udp_client.RxLen = uip_
//存储接收数据长度
//新数据到达,轮询,发送数据
if(udp_client.TxLen)
uip_send(udp_client.TxBuff, udp_client.TxLen); //发送UDP数据包
udp_client.TxLen = 0;
/*************************************************************************************************************************
: void udp_SendDataPackage(u8 *pBuff, u16 len)
: UDP用户发送外部调用接口
* 最后改动时间 :
由底层调度器进行调度自己主动发送
*************************************************************************************************************************/
void udp_SendDataPackage(u8 *pBuff, u16 len)
if(len & UIP_TX_BUFF_ZISE) len = UIP_TX_BUFF_ZISE;
memcpy(udp_client.TxBuff, pBuff, len);
udp_client.TxLen =
//udp_client.h
/*************************************************************************************************************
* 文件名称:
udp_client.h
uIP UDPclient相关函数
* 创建时间:
* 最后改动时间:
UDPclient相关函数
*************************************************************************************************************/
#ifndef _UDP_CLIENT_H_
#define _UDP_CLIENT_H_
#include &tcp.h&
#include &uip.h&
#include &system.h&
#include &uIP_user.h&
extern u16 UDP_ClientP
//UDP client本地port
extern UIP_USER udp_
//UDP client数据结构
bool udp_client_reconnect(u8 IpAddr0,u8 IpAddr1,u8 IpAddr2,u8 IpAddr3, u16 ServerPort, u16 ClientPort); //建立一个UDPclient
void udp_client_appcall(void);
//UDP client应用回调函数
void udp_SendDataPackage(u8 *pBuff, u16 len); //UDP用户发送外部调用接口
#endif //_UDP_CLIENT_H_
udp_server_connected(UDP_SERVER_PORT, 0);
//新建UDP服务器,客户端随意port
udp_client_reconnect(255,255,255,255,UDP_REMOTE_PORT,UDP_LOCAL_PORT); //广播方式连接服务器
UIP_MutexPen();
//申请信号量
//UDP通信处理
if(udp_client.RxLen & 0)
uart_printf(&UDP客户端\r\n&);
uart_printf(&服务器port:%d\r\n&,udp_client.ServerPort);
uart_printf(&客户端port:%d\r\n&,udp_client.ClientPort);
uart_printf(&UDP Server Rx(%dB):%s\r\n&,udp_client.RxLen,(char*)udp_client.RxBuff);
udp_SendDataPackage(udp_client.RxBuff, udp_client.RxLen);
udp_client.RxLen = 0;
//UDP服务器数据处理
if(udp_server.RxLen & 0)
uart_printf(&UDP服务器\r\n&);
uart_printf(&服务器port:%d\r\n&,udp_server.ServerPort);
uart_printf(&客户端port:%d\r\n&,udp_server.ClientPort);
uart_printf(&UDP Server Rx(%dB):%s\r\n&,udp_server.RxLen,(char*)udp_server.RxBuff);
udp_ServerSendDataPackage(udp_server.RxBuff, udp_server.RxLen, udp_server.ClientPort);
udp_server.RxLen = 0;
UIP_MutexPost();
//释放信号量
if(isGetIP == FALSE) goto Udp_R //掉线后又一次初始化
OSTimeDlyHMSM(0,0,0,100);
须要改动uip_udp_new
加入一个简单的随机数产生本地随机port
/*---------------------------------------------------------------------------*/
//注意,rport:须要htons(xxxx)
//lport:0系统随机端口;否则:指定端口,无需htons(),直接输入就可以
#if UIP_UDP
struct uip_udp_conn *
uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport, u16 lport)
register struct uip_udp_conn *
/* Find an unused local port. */
if(lport == 0) //随机端口
lastport = 1024+UIP_GetRandom()%3096+UIP_GetRandom()%1024;
if(lastport &= 32000)
lastport = 4096;
else lastport = //指定端口
for(c = 0; c & UIP_UDP_CONNS; ++c) {
if(uip_udp_conns[c].lport == htons(lastport)) {
通用调试软件UDPserver模式不便于使用或不,我正在使用别人的电脑UDP测试广播搜索模式.
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/lcchuguo/p/5027133.html
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!403 Forbidden
403 Forbidden

我要回帖

更多关于 遇到市民求助该怎么办 的文章

 

随机推荐