一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

当前工作是为设备上位机做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 }
复制代码

 

posted on   一杯清酒邀明月  阅读(4798)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2020-06-11 Linux文件和文件夹操作
2020-06-11 Linux关于makefile的使用
2020-06-11 C++中的queue类、Qt中的QQueue类
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示