Qt聊天_02

一.TCP

1.步骤

1.加入 network

QT       += core gui network

2.服务端

1.创建ui界面

2.在server.h中创建两个指针
#include <QTcpServer>
#include <QTcpSocket>
private:
    Ui::server *ui;
    QTcpServer* server1;//监听的套接字
    QTcpSocket* conn;//通信的套接字
3.在server.cpp中写功能
{

    ui->setupUi(this);
    ui->sIP->setText("127.0.0.1");
    ui->sPort->setText("9999");
    //实例化init
    server1 = new QTcpServer(this);
    //监听
    server1->listen(QHostAddress(ui->sIP->text()),ui->sPort->text().toInt());
    //新的链接
    connect(server1,&QTcpServer::newConnection,this,[=](){
        //接受客户端的套接字对象 accept
        //sock——addr 结构体 == 类 QTcpSocket
        conn = server1->nextPendingConnection();//返回客户端的套接字地址对象
        ui->record->append("有新的链接。。。");

        //保证conn是一个有效的对象
        connect(conn,&QTcpSocket::readyRead,this,[=](){
            //接收数据
            QByteArray array = conn->readAll();
            ui->record->append(array);
        });
    });

    //发送
    connect(ui->send,&QPushButton::clicked,this,[=](){
        //发送数据
        //QTextEdit
        conn->write(ui->msg->toPlainText().toUtf8().data());
        ui->record->append("Me Say" + ui->msg->toPlainText());
        //clear
        ui->msg->clear();
    });
}

3.客户端

1.创建ui界面

在这里插入图片描述

2.在client.h中创建两个指针
#include <QTcpSocket>
private:
    Ui::client *ui;
    QTcpSocket* client1
3.在client.cpp中写功能
{
    ui->setupUi(this);
    ui->sIP->setText("127.0.0.1");
    ui->sPort->setText("9999");

    //初始化 inti
    client1 = new QTcpSocket(this);
    //链接服务器
    client1->connectToHost(QHostAddress(ui->sIP->text()),ui->sPort->text().toInt());

    //接受数据
    connect(client1,&QTcpSocket::readyRead,this,[=](){
        QByteArray array = client1->readAll();
        ui->record->append(array);
    });

    connect(ui->send,&QPushButton::clicked,this,[=](){
        client1->write(ui->msg->toPlainText().toUtf8());
        ui->record->append("ME Say:" + ui->msg->toPlainText());
        ui->record->clear();
    });

}

二.UDP

1.步骤

1.加入 network

QT       += core gui network

2.服务端

1.创建ui界面

在这里插入图片描述

2.在server.h中创建两个指针
#include <QUdpSocket>
private:
    Ui::server *ui;
    QUdpSocket*  udp1;
};
3.在server.cpp中写功能
{
    ui->setupUi(this);
     ui->record->setReadOnly(true);

    udp1 = new QUdpSocket(this);

    ui->cIP->setText("127.0.0.1");
    ui->cPort->setText("9999");
    ui->sPort->setText("8888");



    //if want receive must bind port
    udp1->bind(QHostAddress::AnyIPv4,ui->sPort->text().toInt());

    //send msg
    connect(ui->send,&QPushButton::clicked,this,[=](){
        udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress("224.0.0.10"),ui->cPort->text().toInt());
        ui->record->append("Me Say:" + ui->msg->toPlainText());
        ui->msg->clear();
    });

    //read msg
    connect(udp1,&QUdpSocket::readyRead,this,[=](){
        //获取传过来数据的大小
        qint64 size = udp1->pendingDatagramSize();
        //给数据申请一块同样大小的内存 ,赋值是0
        QByteArray array(size,0);
        //接收数据 array.data()给转化成 char* 类型
        udp1->readDatagram(array.data(),size);
        ui->record->append("服务端:"+array);
    });
}

3.客户端

1.创建ui界面

在这里插入图片描述

2.在client.h中创建两个指针
#include <QUdpSocket>
private:
    Ui::client *ui;
    QUdpSocket*  udp2;
};
3.在client.cpp中写功能
{
    ui->setupUi(this);

    ui->record->setReadOnly(true);

    udp2 = new QUdpSocket(this);
    ui->sIP->setText("127.110.0.1");
    ui->sPort->setText("8888");
    ui->cPort->setText("9999");



    //if want receive must bind port
    udp2->bind(QHostAddress::AnyIPv4,ui->cPort->text().toInt());

    //加入到组播的组中
    udp2->joinMulticastGroup(QHostAddress("224.0.0.10"));
    //send msg
    connect(ui->send,&QPushButton::clicked,this,[=](){
        udp2->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->sIP->text()),ui->sPort->text().toInt());
        ui->record->append("Me Say:" + ui->msg->toPlainText());
        ui->msg->clear();
    });

    //read msg
    connect(udp2,&QUdpSocket::readyRead,this,[=](){
         //获取传过来数据的大小
        qint64 size = udp2->pendingDatagramSize();
        //给数据申请一块同样大小的内存 ,赋值是0
        QByteArray array(size,0);
        //接收数据 array.data()给转化成 char* 类型
        udp2->readDatagram(array.data(),size);
        ui->record->append("客户端:"+array);
    });
}

三.结构图

  • 参考黑马程序员网课讲解

1.QT中IO设备

在这里插入图片描述

2.Linux下的网络编程过程

在这里插入图片描述

3.TCP聊天的结构图

在这里插入图片描述

4.UDP聊天的结构图

5.TCP发送文件的结构图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值