首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Brew >

brew udp通讯 ISOCKET_RecvFrom有关问题

2012-01-19 
brew udp通讯 ISOCKET_RecvFrom问题先贴出我接收函数的源码如下:static void NS_UDPDNSReceiveData( CGPSA

brew udp通讯 ISOCKET_RecvFrom问题
先贴出我接收函数的源码如下:
static void NS_UDPDNSReceiveData( CGPSApp *pMe )
{
INAddr ipVal;
INPort portVal;
int nRead;

MEMSET( pMe->g_naviRealTraffic.pReceiveBuf, 0, DATABUF_LENGTH );
nRead = ISOCKET_RecvFrom( pMe->pISocket, pMe->g_naviRealTraffic.pReceiveBuf, DATABUF_LENGTH, ISOCKET_FLAG_SENDTO_URGENT | ISOCKET_FLAG_SENDTO_WAKEUP, 
&ipVal, &portVal );

if ( nRead == AEE_NET_ERROR )
{
NS_ReleaseObj( pMe->pISocket ); //关闭套接字
}
else if ( nRead == 0 )
{
NS_ReleaseObj( pMe->pISocket );
}
else if ( nRead == AEE_NET_WOULDBLOCK )
{
ISOCKET_Readable( pMe->pISocket, (PFNNOTIFY)NS_UDPDNSReceiveData, pMe );
}
else
{
NavLog( "NS_UDPDNSReceiveData Success!!! \n" );
}

}

现在遇到的问题是:ISOCKET_RecvFrom返回AEE_NET_WOULDBLOCK后,我调用ISOCKET_Readable,然后设置ISOCKET_Readable的回调参数重新接收。。。但是我调试的时候返回AEE_NET_WOULDBLOCK后,整个NS_UDPDNSReceiveData就结束了,而不是再次的接收啊???
  很急很急,忘做过类似问题的帮忙分析下。。。。
  想请教一个问题:UDP的话,只要创建了套接字,然后只管发送接收数据就行,不用绑定连接吧?

[解决办法]
在写之前需要Bind,写成功读取的时候,不需要要绑定。遇到Block是,需要回调读取。
[解决办法]
改为nRead = ISOCKET_RecvFrom( pMe->pISocket, pMe->g_naviRealTraffic.pReceiveBuf, DATABUF_LENGTH, 0,
&ipVal, &portVal );在recvfrom时flag不可以使用。

热点排行