微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > CC3200 UDP数据接收问题

CC3200 UDP数据接收问题

时间:10-02 整理:3721RD 点击:

//打开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这样连续操作吗?

你创建一个socket之后,就会返回一个ID,就是你的sockID,应该不会放在两个函数就不行的情况,你的WIFI_UdpRecieve里面的buf在哪里分配的?

接收缓冲区是全局定义的。

问题的确无法解决,现在只能做在一个函数里面,每次连续的操作:打开->创建->bind->接收,才能正确运行。

发送数据SendTo是可以分别执行的,只有接收不行,这个问题困扰我很久,

请问你的问题解决了吗?我现在也遇到了这个问题,是否可以交流下?

没解决,郁闷,

你可以参考wifi_audio_app或者serial_wifi例程,它们都是在不同的函数里面去创建套接字和收数据,是没有问题的。

所以是不是你的代码哪里有什么问题。你可以基于例程来修改看看。

看了下adudio和serial例程,感觉在socket创建,bind,函数调用上面都差不多,,,,唯一区别是我们的程序是裸奔,并没有使用serial例程那种多任务环境,也没有用到select功能。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top