QT Lamba表达式, UDP,TCP 通信

Lambda表达式

connect(对象名,&类名::信号,[xxxx] (){ 函数体});

[xxxx]可以是

[this]

表示只以传递的方式捕获当前指针

[]如果是空的就表示不补获任何外部变量

说明(在这里外部变量指的是函数体之外)

= 以传值的方式捕获所有的外部变量

[&] 以传引用的方式捕获所有的外部变量

[x,&y] x以传值的方式捕获 y以喘引用的方式捕获

[&,x] x以传值的方式捕获 剩余的外部变量用传引用的方式捕获

槽函数定义为 on_ 按钮名_信号名();可直接不用信号与曹链接


UDP,TCP 通信

QUdpSocket 类 效率高不可靠会有丢包情况

派生自QAbstractSocket 通信抽象类

udp指针->writeDatagram(btData.data(), btData.size(), QHostAddress::Broadcast, port);//往udp中写入数据

QHostAddress::Broadcast(即 255.255.255.255 )广播的方式写 服务端广播数据 特殊的地址进行广播 一般建议发的数据报小于512字节 port表示端口号 一般选择 1024-65535 1024以下用作常用端口号不建议使用 btData.data() 数据(char类型) btData.size() 数据的大小 btData为QBteArray

注 发送的数据一般都是 QBteArray 类型字节数组类 如是别的类型需转换
Socket通信 要在项目文件中 QT+=core gui network // 网络编程支持

m_udpReceiver->bind(port, QUdpSocket::ShareAddress)//以共享的方式绑定端口
connect(m_udpReceiver, &QUdpSocket::readyRead, this, &TalkWindowShell::processPendingData);//有数据过来会发射信号 processPendingData//自定义槽函数用于处理发来的数据
m_udpReceiver->hasPendingDatagrams() ;udp接收端 是否有未处理的数据 有返回真

QByteArray btData;//字节数组类
btData.resize(m_udpReceiver->pendingDatagramSize());//这个字节数组大小设置为udp未处理的数据的大小
m_udpReceiver->readDatagram(btData.data(), btData.size());//读取udp数据


TCP 一对一传输 QTcpSocket 类 可靠

派生自QAbstractSocket通信抽象类 C/S模型 客户端和服务端

Socket通信 要在项目文件中 QT+=core gui network // 网络编程支持

服务端 QTcpServer

QTcpServer ->listen(QHostAddress::AnyIPv4, port);//监听来自任何主机 port端口号int 类型 QHostAddress::AnyIPv4 任何ip地址 也可直接输入某个ip

qDebug<<QTcpServer ->errorString(); 这段代码表示打印出监听不成功的信息

connect(tcpServer,&QTcpServer::newConnection,this,&类名::onNewConnect);//信号与曹的链接 如果有新的链接来了 就执行槽函数

QTcpSocket =tcpServer->nextPendingConnection();返回当前链接的客户端 用QTcpSocket 保存

套接字 QTcpSocket

tcpSocket->abort();//终止链接

tcpSocket->connectToHost(“127.0.0.1”, 端口号);//链接主机

connect(QTcpSocket ,&QTcpSocket::disconnected,QTcpSocket,&QTcpSocket::deleteLater);//如果断开了链接就销毁这个链接 标准函数库

connect(this, SIGNAL(readyRead()), this, SLOT(onReceiveData()));//当有消息来就会发射readyRead()信号 自定义槽

  1. 1. QTcpSocket ->write(QByteArray);//tcp写  入数据//QString.toutf8()//转成字节数组类
        QTcpSocket ->flush();//清空socket输入缓冲区
    
    2. QByteArray buffer;//字节数组类
    
    3. buffer.resize(QTcpSocket->bytesAvailable() );//设置大小为接收到数据得大小
    
    4. buffer= QTcpSocket->readAll();//获取到所有接收得数据
    
    5. buffer= QTcpSocket->read(buffer,buffer.size());//获取到接收得数据
    

connect(QTcpSocket ,SIGNAL(QAbstractSocket::SocketError ),this,SLOT(onError(QAbstractSocket::SocketError e));//如果tcp发生错误 自定义槽 (发射信号编译器带参)

void onError(QAbstractSocket::SocketError  e)

{

​     qDebug()<<"错误信息"<<e<<endl;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值