QT示例:基于TCP点对点Socket通讯

下载:基于TCP点对点通讯

一、 概述

首先介绍一下TCP:(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。相比而言UDP,就是开放式、无连接、不可靠的传输层通信协议。

二、TCP 协议工作原理

在这里插入图片描述

三、TCP 编程模型

在这里插入图片描述

四、基于TCP点对点通讯示例

1、客户端

客户端的代码比服务器稍简单,总的来说,使用QT中的QTcpSocket类与服务器进行通信只需要以下5步:
1)创建QTcpSocket套接字对象

socket = new QTcpSocket();

2)使用这个对象连接服务器

socket->connectToHost(IP, port);

3)使用write函数向服务器发送数据

socket->write(data);

4)当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据

QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
 
void myWidget::socket_Read_Data()
{
   
    QByteArray buffer;
    //读取缓冲区数据
    buffer = socket->readAll();
}

5)断开与服务器的连接(关于close()和disconnectFromHost()的区别,可以按F1看帮助)

socket->disconnectFromHost();
socket->close();
2、客户端Client示例

.pro文件添加:

QT        +=network

myWidget.h 添加:

//#include <QtNetwork>
#include <QTcpSocket>
#include <QMessageBox>

namespace Ui {
   
class myWidget;
}

class myWidget : public QWidget
{
   
    Q_OBJECT

public:
    explicit myWidget(QWidget *parent = 0);
    ~myWidget();

private slots:
    void on_pushButton_connect_clicked(); // 连接按钮

    void socket_Read_Data();	// 数据流读取
    
    void on_pushButton_send_clicked(); // 发送数据
    
    void socket_Disconnected();	// 连接中断
private:
    Ui::myWidget *ui;
    
    QTcpSocket *socket;
    QPalette Pal0,Pal1; // 调色板
};    

myWidget.cpp 添加:

#include "mywidget.h"
#include "ui_mywidget.h"

myWidget::myWidget(QWidget *parent):QWidget(parent),ui(new Ui::myWidget)
{
   
    ui->setupUi(this);
    // 一、创建QTcpSocket套接字对象
    socket = new QTcpSocket;
    ui->pushButton_send->setEnabled(false);
    ui->lineEdit_IP->setText("192.168.1.100");
    ui->lineEdit_port->setText("8010");

    Pal0 =ui->pushButton_connect->palette();
    Pal1.setColor(QPalette::ButtonText,Qt::red); // 只能对按钮文本、窗口文本的动态颜色设置

    //连接信号槽
    QObject::connect(socket, &QTcpSocket::readyRead, this, &myWidget::socket_Read_Data);
    QObject::
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值