QT踩坑第十二天(网络编程实战)

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值