Qt——TCP服务器和客户端

目录

一、项目展示

二、TCP服务器的实现

1、UI界面布局

2、核心代码解析

3、总体代码

三、TCP客户端的实现

1、UI界面布局

2、核心代码解析

3、总体代码


一、项目展示

TCP

二、TCP服务器的实现

1、UI界面布局

2、核心代码解析

步骤一: 创建工程, 在工程文件.pro 中添加 network,

QT       += core gui network

 步骤二: 服务器端编程:

1.创建 QTcpServer 对象2.创建监听端口, 使得客户端可以使用这个端口访问服务器, 使用 listen 函数。

bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);

第一个参数是绑定指定的地址(即本机服务器 IP) , 第二个参数是绑定的本服务器端口号。

监听某个端口时, 如果有新连接进来就发出 newConnection()信号。

3.当服务器对象被访问时, 会发出 newConnection()信号, 所以为该信号添加槽函数并用一个 QTcpSocket对象接受客户端的访问。

4.当socket接受缓冲区有新数据到来时, 会发出readyRead()信号, 为该信号添加槽函数, 使用readyRead()读取。

5.socket 发送数据可直接调用 write()成员函数。

6.关闭端口号。 

3、总体代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建对象
    tcpServer = new QTcpServer(this);
    tcpSocket = new QTcpSocket(this);

    //连接信号与槽函数绑定
    connect(tcpServer,SIGNAL(newConnection()),SLOT(newConnection_Slot()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::newConnection_Slot()
{
    //连接客户端后socket
    tcpSocket = tcpServer->nextPendingConnection();
    //套接字的接收数据信号与数据槽函数连接
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Solt()));
}

void Widget::readyRead_Solt()
{
    QString buf;
    //读取数据
    buf = tcpSocket->readAll();
    ui->jieshou->appendPlainText(buf);
}

//打开服务器
void Widget::on_open_clicked()
{
    //监听
    tcpServer->listen(QHostAddress::Any,ui->duankou->text().toUInt());
}

//关闭服务器
void Widget::on_close_clicked()
{
    tcpSocket->close();
}

//发送数据
void Widget::on_send_clicked()
{
    tcpSocket->write(ui->fasong->text().toLocal8Bit().data());
}

三、TCP客户端的实现

1、UI界面布局

2、核心代码解析

1.创建 QTcpSocket 套接字对象2.使用套接字对象的成员函数去请求连接服务器。

void connectToHost(const QHostAddress &address, quint16 port, openMode mode = ReadWrite);

2.第一个参数为服务器 IP 地址, 第二个参数为服务器端口号。 第三个参数为打开方式, 默认为可读可写

函数功能: 请求连接服务器连接成功后发出connected()信号, 绑定槽函数connected_Solt()去操作socket。

3.使用 write 函数向服务器发送数据, 当 socket 接收缓冲区有新数据到来时会发出 readyRead()信号, 为该信号添加槽函数以读取数据。

4.断开与服务器的连接。 

3、总体代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建socket对象
    tcpSocket = new QTcpSocket(this);
}

Widget::~Widget()
{
    delete ui;
}

//打开客户端
void Widget::on_open_clicked()
{
    tcpSocket->connectToHost(ui->ip->text(),ui->duankou->text().toUInt());
    connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_Solt()));
}

void Widget::on_close_clicked()
{
    tcpSocket->close();
}

void Widget::on_send_clicked()
{
    tcpSocket->write(ui->fasong->text().toLocal8Bit().data());
}

//等待数据到来
void Widget::connected_Solt()
{
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Solt()));
}

//读取数据
void Widget::readyRead_Solt()
{
    ui->jieshou->appendPlainText(tcpSocket->readAll());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琪琪猫不会嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值