QTcpSocket waitForReadyRead()等函数用法——客户端开关读写应用笔记

当前工作是为设备上位机做TCP通信,所以只需要写客户端程序,环境是Qt5.12 MinGW,用QTcpSocket类。以下是基本的开关读写遇到的沟沟坎坎。

开关代码:

myClass()
{
    QHostAddress ip;
    quint16 port;
    ip = QHoseAddress("192.168.10.76");              //服务器IP
    port = 8800;                                     //用服务器开放的端口号去连接服务器。
}

/***************************开**************************/
int myClass::Open()
{
    m_tcpClient->connectToHost(ip,port);             //用目标服务器IP/port执行连接动作
    if(m_tcpClient->waitForConnected())              //等待连接返回
    {
        return 0;
    }
    return -3;
}

/***************************关**************************/
int myClass::Close()
{
    m_tcpClient->disconnectFromHost();
    if(m_tcpClient->state() == QAbstractSocket::UnconnectedState
        || m_tcpClient->waitForDisconnected())       //多了个条件
    {
        return 0;
    }
    return -3;
}

 读:


/***************************读**************************/
//读我目前实现两种
//1、这是我最先实现的 定义信号和槽,qiodevice.h中的readyRead()信号触发槽函数进行读取数据。

myClass()
{
    connect(tcpClient,SIGNAL(readyRead()),this,SLOT(ReadData()));
    //头文件要声明SLOT,这里不写了
    //出现connect报错:"use of undeclared identifier 'connect'"
    //解决方案:增加基类public QObject
    //我的是这样写class tcpComm:public ibasecomm,public QObject
}

void myClass::ReadData()
{
    //当有数据进来,槽函数激活,没有过多测试激活时机等等,这种不是我需要的。
}

//2、由上层调用我的读写函数,利用waitForReadyRead()函数阻塞进程,等待数据,函数默认参数为等待时长=30000ms,超时返回false

int myClass::read(void * buffer, int len)
{
//尝试在waitForReadyRead()函数之前有数据过来,当执行wait函数时,会直接返回true。
//在阻塞期间来数据,会返回true。
//阻塞默认参数30000ms,超时返回false。
    if(m__tcpClient->waitForReadyRead())
    {
        buffer = (void*)m_bRead.data_ptr();
        return m_bRead.size();
    }
}
//代码功能不完整,主要是实现读取数据功能。


/***************************写**************************/
int myClass::Write(const void * buffer, int len)
{
    const char * data = (char *)buffer;
    qint64 nRes = m_tcpClient->write(data,len);
    return (int)nRes;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值