我用正点原子的板子试网口程序,UDP点对点通信已成功。
想改为广播方式,把目标IP地址设为255.255.255.255
但是通信不成功,电脑可以收到单片机发的数据,
而单片机收不到电脑发的数据。
请高手指教,还要改其他地方吗?谢谢!
可以试下不用全网段广播,比如改为192.168.1.255试下。
不光是ip,ip你可以用广播ip没问题,另外两端的端口也是要相同的,你的目的地端口和对面打开的端口要是同一个端口
有人说,IP设为自动获取,是要对端具备DHCP服务器才行的。那广播方式通信,电脑IP地址是不是也要分配一个固定的地址啊?可是要是分配一个固定的地址,不用广播方式也能通信呀。我糊涂了。
//UDP测试
void udp_demo_test1(void)
{
err_t err;
//struct udp_pcb *udppcb; //定义一个TCP服务器控制块
struct ip_addr rmtipaddr; //远端ip地址
u8 *tbuf;
u8 key;
u8 res=0;
u8 t=0;
udp_demo_set_remoteip();//先选择IP
tbuf=mymalloc(SRAMIN,200); //申请内存
if(tbuf==NULL)return ; //内存申请失败了,直接退出
udppcb=udp_new();
if(udppcb)//创建成功
{
IP4_ADDR(&rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]);
//err=udp_connect(udppcb,&rmtipaddr,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器
//err=udp_connect(udppcb,IP_ADDR_ANY,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器
err=udp_connect(udppcb,IP_ADDR_BROADCAST,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器
if(err==ERR_OK)
{
err=udp_bind(udppcb,IP_ADDR_ANY,UDP_DEMO_PORT);//绑定本地IP地址与端口号
//err=udp_bind(udppcb,IP_ADDR_BROADCAST,UDP_DEMO_PORT);//绑定本地IP地址与端口号
if(err==ERR_OK) //绑定完成
{
udp_recv(udppcb,udp_demo_recv,NULL);//注册接收回调函数
}else res=1;
}else res=1;
}else res=1;
}
我把程序改成这样,电脑能收到单片机的数据,单片机收不到电脑发的数据。