UDP广播,ESP8266客户端,PC服务端
程序编写思路
1.包含的头文件
#include "osapi.h"
#include "user_interface.h"
#include "espconn.h"
#include "mem.h"
2.定义一个UDP客户端初始化函数
int ICACHE_FLASH_ATTR
user_udpclient_init(uint32 remote_port)
{
1.设置广播模式:sta模式下UDP广播
2.配置UDP客户端相关参数:udp_client_conn.type、udp_client_conn.proto.udp、本地端口、
3.目标端口、目标IP地址
4.注册发送和接受的回调函数
5.建立UDP传输
6.发送消息
}
3.发送回调函数
4.接收回调函数
5.user_Init(void)中调用
程序
/*定义一个UDP客户端初始化函数*/
int ICACHE_FLASH_ATTR
user_udpclient_init(uint32 remote_port)
{
//设置广播模式
wifi_set_broadcast_if(0x01);//在sta模式udp广播
//配置UDP客户端相关参数
udp_client_conn.type = ESPCONN_UDP;//设置类型为UDP协议
udp_client_conn.proto.udp = (esp_udp *) os_zalloc(sizeof(esp_udp));//分配空间
udp_client_conn.proto.udp ->local_port = espconn_port();//获取可用端口作为本地端口
udp_client_conn.proto.udp ->remote_port =remote_port;//目标端口
const char udp_remote_ip[4]={255,255,255,255};//目标IP地址
os_memcpy(udp_client_conn.proto.udp->remote_ip,udp_remote_ip,4);
//注册发送和接收的回调函数
espconn_regist_sentcb(&udp_client_conn, udp_client_sent_cb);
espconn_regist_recvcb(&udp_client_conn, udp_client_recv_cb);
//建立UDP传输
espconn_create(&udp_client_conn);
os_printf("UDP connect success!\n");
//发送消息
espconn_sent(&udp_client_conn, "HI", os_strlen("HI"));
}
/*接收回调函数*/
void ICACHE_FLASH_ATTR
udp_client_recv_cb(void *arg, char *pdata, unsigned short len)
{
os_printf("数据接收:\t%s\n",pdata);
}
/*发送回调函数*/
void ICACHE_FLASH_ATTR
udp_client_sent_cb(void *arg)
{
os_printf("send success!\n");
}
再调用UDP客户端初始化函数,服务端目标端口一般给8686
void ICACHE_FLASH_ATTR
user_init(void)
{
wifi_set_opmode(STATION_MODE);
user_udpclient_init(8686);
}
结果图
程序中像PC端发送HI
像客户端目标主机发送“hello”,通过串口助手接收到“hello”
注意
刚开始调试一直不成功,发送不出去也接收不到
原因:电脑系统有网络的防火墙,导致一直连接不上,
解决:关掉防火墙,即可正常通信发送和接受。