1. 网络相关概念
1. TCP与UDP的区别?
【TCP】
TCP(Transmission Control Protocol,即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。
适用场景:
适合于对传输质量要求较高的通信
在需要可靠数据传输的场合,通常使用TCP协议
MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议
【UDP】
UDP(User Datagram Protocol,即用户数据报协议),是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
适用场景:
发送小尺寸数据(如对DNS服务器进行IP地址查询时)
适合于广播/组播式通信中。
MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
2. 什么是IP地址?
●IP地址是Internet中主机的标识
●Internet中的主机要与别的机器通信必须具有一个IP地址
●IP地址为32位(IPv4)或者128位(IPv6)
●表示形式:常用点分十进制,如202.38.64.10,最后都会转换为一个32位的无符号整数。
3. 什么是端口号?
端口号
● 为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区
● TCP端口号与UDP端口号独立
● 端口号一般由IANA (Internet Assigned Numbers Authority) 管理
● 端口用两个字节来表示:0~65535
● 推荐范围5000-10000,但是避免使用连号,例如:6666、8888等
2. Qt网络编程简介
Qt主要在嵌入式中作为上位机进行编程,上位机的功能主要是发送控制命令和接收传感器数据,因此主要使用TCP进行通信,本次网络编程以TCP为例。
在Qt中使用网络相关类之前,需要在.pro项目配置文件中,增加network模块。
常用类有:
● QTcpServer
此类用于建立和管理一个基于TCP的服务器,此类直接继承自QObject,并不继承QIODevice,因此QTcpServer类不具备IO功能。
● QTcpSocket
此类表示一个基于TCP的连接,间接继承QIODevice,因此使用此类作为IO的功能。
3. 相关函数
相关函数如下:
● QTcpServer::QTcpServer(QObject * parent = 0)
构造函数
● bool QTcpServer::listen(const QHostAddress & address = QHostAddress::Any, quint16 port = 0)
开启监听服务
参数1:向哪个IP地址开放,QHostAddress是一个IP地址的封装类,默认值表示向任何IP开放。
参数2:在哪个端口号运行监听服务,默认值为随机。
返回值:开启成功或失败
● bool QTcpServer::isListening() const
是否正在监听
● QTcpSocket::QTcpSocket(QObject * parent = 0)
构造函数
●
客户端连接到主机。
参数1:服务器名称,通常为IP地址
参数2:服务器的端口号
参数3:打开模式,默认为读写模式
● void QTcpServer::newConnection() [signal]
服务器每当检测到客户端发起有效连接后发射的信号。
● QTcpSocket * QTcpServer::nextPendingConnection() [virtual]
从服务器对象中获得一个与某个客户端通信的QTcpSocket对象。
● QHostAddress QAbstractSocket::peerAddress() const
获取对方的IP地址。
● quint16 QAbstractSocket::peerPort() const
获取对方的端口号
● void QAbstractSocket::connected() [signal]
● void QAbstractSocket::disconnected() [signal]
连接与断连的信号。
● QTextStream::QTextStream(QIODevice * device)
创建一个用于读写文本的流对象
● QTextStream & QTextStream::operator<<(const QString & string)
输出一个QString的字符串信息
● void QIODevice::readyRead() [signal]
有新数据可读时发射的信号
● QString QTextStream::readAll()
读取所有文本数据