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


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

开关代码:

 1 myClass()  2 {  3  QHostAddress ip;  4  quint16 port;  5     ip = QHoseAddress("192.168.10.76");              //服务器IP
 6     port = 8800;                                     //用服务器开放的端口号去连接服务器。
 7 }  8  
 9 /***************************开**************************/
10 int myClass::Open() 11 { 12     m_tcpClient->connectToHost(ip,port);             //用目标服务器IP/port执行连接动作
13     if(m_tcpClient->waitForConnected())              //等待连接返回
14  { 15         return 0; 16  } 17     return -3; 18 } 19  
20 /***************************关**************************/
21 int myClass::Close() 22 { 23     m_tcpClient->disconnectFromHost(); 24     if(m_tcpClient->state() == QAbstractSocket::UnconnectedState 25         || m_tcpClient->waitForDisconnected())       //多了个条件
26  { 27         return 0; 28  } 29     return -3; 30 }

读:

 1 /***************************读**************************/
 2 //读我目前实现两种  3 //1、这是我最先实现的 定义信号和槽,qiodevice.h中的readyRead()信号触发槽函数进行读取数据。
 4  
 5 myClass()  6 {  7     connect(tcpClient,SIGNAL(readyRead()),this,SLOT(ReadData()));  8     //头文件要声明SLOT,这里不写了  9     //出现connect报错:"use of undeclared identifier 'connect'" 10     //解决方案:增加基类public QObject 11     //我的是这样写class tcpComm:public ibasecomm,public QObject
12 } 13  
14 void myClass::ReadData() 15 { 16     //当有数据进来,槽函数激活,没有过多测试激活时机等等,这种不是我需要的。
17 } 18  
19 //2、由上层调用我的读写函数,利用waitForReadyRead()函数阻塞进程,等待数据,函数默认参数为等待时长=30000ms,超时返回false
20  
21 int myClass::read(void * buffer, int len) 22 { 23 //尝试在waitForReadyRead()函数之前有数据过来,当执行wait函数时,会直接返回true。 24 //在阻塞期间来数据,会返回true。 25 //阻塞默认参数30000ms,超时返回false。
26     if(m__tcpClient->waitForReadyRead()) 27  { 28         buffer = (void*)m_bRead.data_ptr(); 29         return m_bRead.size(); 30  } 31 } 32 //代码功能不完整,主要是实现读取数据功能。
33  
34  
35 /***************************写**************************/
36 int myClass::Write(const void * buffer, int len) 37 { 38     const char * data = (char *)buffer; 39     qint64 nRes = m_tcpClient->write(data,len); 40     return (int)nRes; 41 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM