QTcpServer. QTcpSocket. QUdpSocket之间的区别
1. QTcpServer
顾明思意,就是做Tcp服务器用的,Qt已经全部封装好了,直接调用即可
使用方法:new 一个对象,绑定地址与端口,然后通过信号与槽,处理到来的连接即可
m_server = new QTcpServer();//监听地址和端口号m_server->listen(QHostAddress::Any, 8888);connect(m_server, &QTcpServer::newConnection, this, &myServer::handleSocket);
处理函数
void myServer::handleSocket()
{QTcpSocket* socket = m_server->nextPendingConnection();......
}
写入数据的话通过write即可
读取数据的话通过readAll
QByteArray messageByte = socket->readAll();
2. QTcpSocket的连接是可靠的,是一对一的
QTcpSocket的连接是可靠的,是一对一的
使用方法:
1.new 一个QTcpSocket
m_Tcpsocket = new QTcpSocket();
2.连接到指定ip和端口
m_Tcpsocket->connectToHost("127.0.0.1", 8888);
3.等待连接即可
if(m_Tcpsocket->waitForConnected(3000))
{ui->textBrowser->append("已成功连接到服务器!");connect(m_Tcpsocket, &QTcpSocket::readyRead,[=](){ui->textBrowser->append(m_Tcpsocket->readAll());});connect(m_UdpSocket, &QUdpSocket::readyRead, this, &Dialog::receive);
}
3. QUcpSocket
QUcpSocket的连接是不可靠的,是一对多或者多对多的,效率很高,丢包率也高
使用方法:new 一个QUdpSocket,如果只是写数据发送的话,不读取数据的话,是不用使用bind()方法绑定地址和端口的
m_udpSocket = new QUdpSocket();
绑定端口,读取数据时需要指定端口,和地址
m_UdpSocket->bind(5555, QUdpSocket::ShareAddress);
写入数据时,指定端口,一般采用广播方式发送给指定端口号
m_udpSocket->writeDatagram(message.toLatin1().data(), message.size(),QHostAddress::Broadcast, 5555);
读取数据时,读取的就是绑定端口号的发送来的数据,不能采取QTcpSocket读取数据的方式(readAll)读取数据,这样是读不出来的
采用如下方法:
connect(m_UdpSocket, &QUdpSocket::readyRead, this, &Dialog::receive);void Dialog::receive()
{while(m_UdpSocket->hasPendingDatagrams()) //判断udpSocket是否有数据正在等待读取{QByteArray datagram;datagram.resize(m_UdpSocket->pendingDatagramSize());//调整大小m_UdpSocket->readDatagram(datagram.data(), datagram.size());//读取第一个datagram的长度QString msg=datagram.data();ui->textBrowser->append(msg);}}
QTcpServer. QTcpSocket. QUdpSocket之间的区别相关推荐
- 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
新建项目13IO 13IO.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets network CON ...
- FPGA与ASIC:它们之间的区别以及使用哪一种?
FPGA与ASIC:它们之间的区别以及使用哪一种? FPGA Vs ASIC: Differences Between Them And Which One To Use? VL82C486 Sing ...
- Python 应用领域以及版本之间的区别
Python 应用领域以及版本之间的区别 一.Python应用领域 Python+人工智能,给你更多研究方向选择! 企业级综合实战项目,集六大前沿技术为一体 二. Python 2与Python 3的 ...
- java中separator_java - File.separator和路径中的斜杠之间的区别
java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...
- 机器学习、数据科学、人工智能、深度学习和统计学之间的区别!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Vincent Granville,来源:机器之心 在这篇文章中, ...
- Python里面None True False之间的区别
None虽然跟True False一样都是布尔值. 虽然None不表示任何数据,但却具有很重要的作用. 它和False之间的区别还是很大的! 例子: >>> t = None > ...
- 2.javascript之缓存 localStorage 和sessionStorage之间的区别
2018-08-04 前言 今天做项目的时候遇到了这个问题,用户登录成功之后如何改变将登录的链接切换为用户名 解决方案:使用了sessionstorage缓存 和js的onload加载事件 用户登录成 ...
- java se 与j2se_关于java:J2EE和J2SE项目之间的区别
本问题已经有最佳答案,请猛点这里访问. 我已经从github下载了一个开源项目. 这是一个基于Maven的项目. 我如何理解该项目是J2SE项目还是J2EE项目? 这两种项目在结构上有何不同? Jav ...
- oracle类型sql转为mysql_Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)...
>本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚 ...
- 腾讯面试题:char 和 varchar的最大长度是多少,以及他们之间的区别(看完你就能和面试官笑谈人生了)
title: 腾讯面试题:char 和 varchar的最大长度是多少,以及他们之间的区别(看完你就能和面试官笑谈人生了) tags: 面试常见题 腾讯面试题:char 和 varchar的最大长度是 ...
最新文章
- 概率论中伯努利分布(bernoulli distribution)介绍及C++11中std::bernoulli_distribution的使用
- 【哈渡谱】带你玩转Hadoop之《CentOS虚拟机安装篇》
- Emoji表情编解码库XXL-EMOJI
- JSP中javaBean和Servlet理解
- 没错!Python杀死了Excel!
- php管道的概念,管道线的概念定义及分析技巧的讲解
- 2020年春季计算机网络考试,国家开放大学2020年春季学期电大考试《计算机网络》精选考试题及答案...
- php 有几种打印方法,php 5种打印方式及变量类型,
- opencv python 鼠标响应操作
- 构建postfix邮件服务器(五)extmail和extman的安装,实现web使用和管理邮件系统...
- html 转盘素材,jQuery指针不动转盘动的Rotate转盘插件
- pytorch之transforms
- [Web端接入经验分享] 腾讯云即时通信TIM、实时音视频TRTC
- 怎么python画好几朵玫瑰花_使用Python画玫瑰花
- redmine与svn完美集成方案
- 应用程序正常初始化 0xc015002 失败
- OOALV中字段设置ALV中下拉列表列的实现
- 对话姜老师,DBA的职场之路
- Java9中2个被废弃的使用方法
- android电视机软件锁,如何解锁电视的“应用锁”?OPPO智能电视R1这些操作学起来...