recvfrom vs2010 debug正常 realse错误10040
来源:互联网 发布:关于网络利弊的辩论赛 编辑:程序博客网 时间:2024/05/16 10:51
学习socket程序,udp多播发送和接收。其中一个接收recvfrom函数。在debug能正常运行,在release无法运行
,总是提示10040错误,查询百度,说是接收缓存区不够。下面是程序代码:
void MultiSock::RecvPacket(void)
{
MessageBox(NULL,TEXT("開始接收多播組192.168.5.226上的數據"),TEXT("接收"),MB_OK);
char buf[1028];
char err[10];
int nAddrLen = sizeof(si);
while(TRUE)
{
int nRet = ::recvfrom(s,buf,strlen(buf),0,(sockaddr*)&si,&nAddrLen);
if (nRet != SOCKET_ERROR)
{
buf[nRet]='\0';
MessageBox(NULL,buf,TEXT("數據"),MB_OK);
}
else
{
int n=::WSAGetLastError();
itoa(n,err,10);
MessageBox(NULL,err,TEXT("數據"),MB_OK);
break;
}
}
}
思来想去,后面还用
int nRecvBuf=32*1024;
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
int nSendBuf=32*1024;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));
专门调大缓冲区,也无济于事。后面想想还是recvfrom错误。认真再看看代码,发现接收
缓存区大小recvfrom实际为strlen(buf)。于是用memset(buf,0,1028)初始化。还是不行。
后来干脆直接把strlen(buf)换为数字1028,结果OK。 看来在debug和release下,strlen(buf)
的结果是有区别的。
- recvfrom vs2010 debug正常 realse错误10040
- VS2010 opencv 2.4.11 Debug Realse 属性配置
- MFC下DEBUG运行正常但REALSE版本运行直接退出
- debug正常, Release 出现错误
- vs2010 debug afxwin1.inl错误
- realse版本与debug版本的区别
- QT的Debug和Realse版本
- gradle 区分debug和realse自动化打包
- 【转】程序debug正常release错误
- 【转】程序debug正常release错误
- vs2010开发qt程序debug正常,release出错
- vs2010 ;, Debug应用程序无法正常启动(0xc0000000d).
- vs2010 ;, Debug应用程序无法正常启动(0xc0000000d).
- VC Debug程序可以运行,而Realse版本运行出错
- VC6.0 Realse工程转换为debug工程
- visual studio生成realse和debug .exe可执行文件的方法
- Android Studio获得SHA1(debug版和realse版)
- Debug正常 而Release模式错误问题调试(转载)
- C# webservices 之调用天气预报案例【1】
- android 仿微信滑动变色按钮
- Django视图模板
- 只知道ODBC中设置的系统数据源DNS 名称,如何连接SQL数据库?
- Android 基础总结:(四)Activity(InstanceState)
- recvfrom vs2010 debug正常 realse错误10040
- QT与数据库连接
- window下向路由表中添加路由
- Spring Security(04)——认证简介
- 使用JDK的MessageDigest类进行加密
- 距离感应
- Hadoop学习:简介、Ubuntu上安装配置与wordcount示例
- 阿里云ECS CentOS6.5搭建iRedMail邮件服务器
- Hibernate Session cache