c++ Winsock 非阻塞接收蓝牙数据

//接收数据
void CMyBlueT::RecvMsg()
{
    char Buffer[BUFFERSIZE] = { 0 }; // 文件缓冲区

    DeleteFile(m_strPath);
    CFile file;
    file.Open(m_strPath, CFile::modeCreate | CFile::modeWrite);
    {
        file.Seek(0, CFile::begin);
        memset(&Buffer, 0, BUFFERSIZE);
        int size = 0;
        int nTimes = 0;
        int nRecvTimes = 0;
        BOOL bRecv = FALSE;
        //设置非阻塞
        unsigned long ul = 1;
        int ret;
        ret = ioctlsocket(m_client_socket, FIONBIO, (unsigned long *)&ul);    //设置成非阻塞模式
        if (ret == SOCKET_ERROR)   //设置失败
        {
            SetTips(L"设置非阻塞模式失败。");
            return;
        }
        while (1)
        {
            size = recv(m_client_socket, Buffer, BUFFERSIZE, 0);
            if (size > 0)
            {
                bRecv = TRUE;
                file.Write(Buffer, size);
                //清空缓存区以便下一次接收
                memset(&Buffer, 0, BUFFERSIZE);
            }
            else
            {
                nTimes++;
                if (bRecv)
                {
                    nRecvTimes++;
                }
            }
            if (nRecvTimes > 10 || nTimes > 100)
            {
                break;
            }
            Sleep(50);
        }
        //阻塞
        ul = 0;
        ret = ioctlsocket(m_client_socket, FIONBIO, (unsigned long *)&ul);    //设置成非阻塞模式
        if (ret == SOCKET_ERROR)   //设置失败
        {
            SetTips(L"设置阻塞模式失败。");
            return;
        }
        file.Close();;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值