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

    xiaoxiao2026-03-02  6

    问题描述:前一段时间写了一个基于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成功连接之后才能去发送数据。

    转载请注明原文地址: https://ju.6miu.com/read-1307530.html
    最新回复(0)