下面代码主要功能是:
接收PC客户端语音包,然后转发给网关;
接收数据包时,使用SNIFFER抓包显示长度为172,
但是实际收到长度为1,并且recvfrom返回长度也是172设置接收数据的超时时间,还是收不到数据;
客户端和网关协商,
支持的音频格式,pt=0(g711.u),pt=101 网关异常日志:
10d:17h:51m:3s (lgr_coders_list)(5696)
?? [WARNING] ACCodersList::IsMatch found match with different intervals g711Ulaw64k10 (10 != 20) #ifdef FD_SETSIZE
#undef FD_SETSIZE
#define FD_SETSIZE 1024
#endiffd_set serv_Set;
FD_ZERO(&serv_Set);
FD_SET(udpSckClientToProxy,&serv_Set);
timeval time_Out={200,0}; //设置接收数据的超时时间200ms
int res=select(0,&serv_Set,NULL,NULL,&time_Out);if(res==0 || res==-1)
{ //接收数据超时
TRACE("timeout or error:%d\n",res);
}else if(FD_ISSET(udpSckClientToProxy,&serv_Set))
{
char buf[1024]={0};
bRsLength=recvfrom(udpSckClientToProxy,buf,1024,0,(sockaddr*)&udpAddrHole,&ilength);
CString strIP=inet_ntoa(udpAddrHole.sin_addr); //客户端IP//把语音包转发给网关
}
接收PC客户端语音包,然后转发给网关;
接收数据包时,使用SNIFFER抓包显示长度为172,
但是实际收到长度为1,并且recvfrom返回长度也是172设置接收数据的超时时间,还是收不到数据;
客户端和网关协商,
支持的音频格式,pt=0(g711.u),pt=101 网关异常日志:
10d:17h:51m:3s (lgr_coders_list)(5696)
?? [WARNING] ACCodersList::IsMatch found match with different intervals g711Ulaw64k10 (10 != 20) #ifdef FD_SETSIZE
#undef FD_SETSIZE
#define FD_SETSIZE 1024
#endiffd_set serv_Set;
FD_ZERO(&serv_Set);
FD_SET(udpSckClientToProxy,&serv_Set);
timeval time_Out={200,0}; //设置接收数据的超时时间200ms
int res=select(0,&serv_Set,NULL,NULL,&time_Out);if(res==0 || res==-1)
{ //接收数据超时
TRACE("timeout or error:%d\n",res);
}else if(FD_ISSET(udpSckClientToProxy,&serv_Set))
{
char buf[1024]={0};
bRsLength=recvfrom(udpSckClientToProxy,buf,1024,0,(sockaddr*)&udpAddrHole,&ilength);
CString strIP=inet_ntoa(udpAddrHole.sin_addr); //客户端IP//把语音包转发给网关
}
bRsLength=recvfrom(udpSckClientToProxy,buf,1024,0,(sockaddr*)&udpAddrHole,&ilength); tmp.Empty();
tmp= buf;
int k = tmp.GetLength(); bRsLength的值为172,但是k的值为1,很奇怪
把tmp.Empty()这行拿掉,MSDN的说明是将字符串长度设为了0,并不是将字符串内容设为0
你可以这样:
把
tmp.Empty();
tmp = buf;
替换为:
tmp.Format(_T("%s"),buf);