QT网络编程中主要包含这几个类:
QAbstractSocket(QTcpSocket、QUdpSocket)
QNetworkInterface
QHostAdress
QUrl
QNetworkAccessManager
QNetworkReply
QWebSocket
1、套接字是什么?
用一个比较形象的比喻墙上的一个插座就是一个socket(套接字)
实质上:socket是一个IO设备(基于poisx(文件锁))常见的socket包括哪些:以太网(有线 无线),CAN总线、蓝牙、NFC流式套接字、数据套接字、原始套接字
Socket简单的说就是一个IP地址加一个端口号。因为我们要传输数据,就要知道往哪个机子上传送,而IP地址确定了一台主机,但是这台机子上可能运行着各种各样的网络程序,我们要往哪个程序中发送呢?这时就要使用一个端口来指定UDP程序。所以说,Socket指明了数据报传输的路径。
2、TCP
通过NetAssist分析什么是TCP:
2.1 抓包演示三次握手
虚拟机设置:
使用虚拟网卡创建局域网让主机和虚拟机之间实现通信
Wireshark设置网卡
启动抓包
过滤规则
udp.port = =8080
tcp.port==8080 TCP连接三次握手
连接:
Client->Server:SYN
Server->Client:SYN 、ACK
Client->Server:ACK
断开:
主动方断开:FIN、ACK被动方断开:ACK
Server->Client:FIN、ACK
Client->Server:ACK
2.2 TCP客户端开发
QtTcp通信模型:
需要掌握的接口:
connectToHost(const QHostAddress &address,quint16 port,…)//连接客户端
bool waitForConnected(int msecs=30000)//等待连接的时间
bool waitForReadyRead(int msece=3000)//实现读取数据的阻塞
void disconnectFromHost();//断开与主机的连接
void connected();//连接信号与槽
void disconnected();//断开信号与槽
void readyRead();
void bytesWritten(qint64bytes)
2.2.1、来个小程序连接Tcp服务器
TcpSocket类介绍:
tcpSocketSimpleDemo完成连接->发送->接收->关闭
pro添加模块
需要在pro文件中添加QT +=network
创建TcpSocketTest类,继承与QObject
TcpSocket.h
#ifndef TCPSOCKET_H
#define TCPSOCKET_H
#include <QObject>
#include <QTcpSocket>
class TcpSocket : public QObject
{
Q_OBJECT
public:
explicit TcpSocket(QObject *parent = nullptr);
~TcpSocket();
signals:
public:
void connect2Server();
public slots:
private:
QTcpSocket *socket=nullptr;
};
#endif // TCPSOCKET_H
main.cpp
#include <QCoreApplication>
#include"TcpSocket.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TcpSocket mTcpSocket;
mTcpSocket.connect2Server();
return a.exec();
}
TcpSocket.cpp
#include "TcpSocket.h"
TcpSocket::TcpSocket(QObject *parent) : QObject(parent)
{
}
TcpSocket::~TcpSocket()
{
delete