1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
//打开UDP socket:
int WIFI_OpenUdpSocket(unsigned short Port) [ int iStatus; int iAddrSize; //打开发送socket: SockID = sl_Socket(SL_AF_INET,SL_SOCK_DGRAM, 0); if( SockID < 0 ) [ // error ASSERT_ON_ERROR(SOCKET_CREATE_ERROR); ] //绑定本地端口: sLocalAddr.sin_family = SL_AF_INET; sLocalAddr.sin_port = sl_Htons(Port); sLocalAddr.sin_addr.s_addr = 0; iAddrSize = sizeof(SlSockAddrIn_t); iStatus = sl_Bind(SockID, (SlSockAddr_t *)&sLocalAddr, iAddrSize); if( iStatus < 0 ) [ // error sl_Close(SockID); ASSERT_ON_ERROR(BIND_ERROR); ] return SUCCESS; ] //UDP接收数据: int WIFI_UdpRecieve(char *buf, int Len, int timeout) [ int iStatus = -1; SlSockAddrIn_t sAddr; int iAddrSize; //设置接收超时: struct SlTimeval_t timeVal; timeVal.tv_sec = Timeout; // Seconds timeVal.tv_usec = 0; // Microseconds. 10000 microseconds resolution sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_RCVTIMEO, (_u8 *)&timeVal, sizeof(timeVal)); iStatus = sl_RecvFrom(SockID, buf, Len, 0, ( SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize ); 上面代码设计意图是,一次性创建一个socket,绑定本地端口,SockID是全局变量,供以后接收数据函数使用, 问题如下: 1)sl_RecvFrom始终返回-2 2)如果合并上面两个函数,就是把sl_RecvFrom直接放在WIFI_OpenUdpSocket函数里面,是可以接收数据的,难道每次接收都要打开sock,bind,recv这样连续操作吗? |
|
相关推荐
7个回答
|
|
你创建一个socket之后,就会返回一个ID,就是你的sockID,应该不会放在两个函数就不行的情况,你的WIFI_UdpRecieve里面的buf在哪里分配的?
如果有答案已经回答了您的问题,请标注为已回答。 Please close your question if it has been solved. ------------------------------------------------------------------ |
|
|
|
一个黄人 发表于 2018-5-14 08:58 接收缓冲区是全局定义的。 问题的确无法解决,现在只能做在一个函数里面,每次连续的操作:打开->创建->bind->接收,才能正确运行。 发送数据SendTo是可以分别执行的,只有接收不行,这个问题困扰我很久, |
|
|
|
何必太在意 发表于 2018-5-14 09:16 请问你的问题解决了吗?我现在也遇到了这个问题,是否可以交流下? |
|
|
|
|
|
|
|
你可以参考wifi_audio_app或者serial_wifi例程,它们都是在不同的函数里面去创建套接字和收数据,是没有问题的。 所以是不是你的代码哪里有什么问题。你可以基于例程来修改看看。 如果有答案已经回答了您的问题,请标注为已回答。 Please close your question if it has been solved. ------------------------------------------------------------------ |
|
|
|
一个黄人 发表于 2018-5-14 09:49 看了下adudio和serial例程,感觉在socket创建,bind,函数调用上面都差不多,,,,唯一区别是我们的程序是裸奔,并没有使用serial例程那种多任务环境,也没有用到select功能。 |
|
|
|
我今天测试UDP通讯也碰到sl_RecvFrom返回值为-2的问题,不论是分开和合并返回值始终是-2。
最后找到这个问题的原因是这个接口本身的一个BUG,在接收数据前,iAddrSize 也就是接收地址长度一定要先指定。 iAddrSize = sizeof(struct sockaddr); 这样就没问题了!!! 我猜测原因recvfrom这种接口是需要发送到wifi芯片所在的MCU,发送的时候struct sockaddr from 接收地址malloc使用了这个长度, 这个随机长度造成WIFI芯片接收到这个请求时判断from地址长度不符合格式,故返回-2 |
|
|
|
只有小组成员才能发言,加入小组>>
336 浏览 1 评论
529 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
774 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
651 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1130 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
56浏览 29评论
130浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
252浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
201浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
57浏览 13评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 01:41 , Processed in 0.801221 second(s), Total 61, Slave 55 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号