vc socket在debug模式下可以正常通讯,在release模式下经常通讯失败

问题描述:前一段时间写了一个基于socket的网络程序(B/S模式,应答通讯),使用的是MFC的异步socket类(CAsyncSocket),debug模式下可以正常通讯,打包发布后发现通讯总是失败,在网上查到的资料是debug模式和release模式,只有在编译诊断,和编译效率上有区别。后来借助网络调试助手查看传输数据并调试程序,逐渐缩小了问题范围:

m_pMySocket->Connect()后, 接着直接发送数据m_pMySocket->Send()返回-1(无连接)。

问题到了这里我就在想,是否是因为socket是异步(执行后不等待立即返回)的原因Connect()后立即返回,我就直接去用socket连接句柄直接发送数据Send()的原因造成的,连接服务器是需要时间的(虽然很短),在没有连接上时就去发送数据肯定是不会成功的。事实证明了我的猜想是正确的(虽然之前我经历了无数错误的猜想)

解决办法:在m_pMySocket->Connect()后,添加一个SetTimer(1,100,NULL);时钟 不停轮询判断OnConnect(int nErrorCode)是否响应,(记得要进行超时处理)。必须要等到Socket成功连接之后才能去发送数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值