QT之TCP通信程序

使用网络编程,要在项目文件中添加 QT+=network;

一、服务器程序

#include "serverwidget.h"
#include "ui_serverwidget.h"


ServerWidget::ServerWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::ServerWidget)
{
    ui->setupUi(this);
    tcpsocket=nullptr;
    tcpserver=nullptr;
    setWindowTitle("服务器");
    tcpserver = new QTcpServer(this);//分配空间,指定父对象,自动回收空间
    tcpserver->listen(QHostAddress::Any,8888);//监听所有地址的8888端口
    connect(tcpserver,&QTcpServer::newConnection,            //新连接信号
            [=]
            {
                tcpsocket = tcpserver->nextPendingConnection();//取出tcpserver套接字的下一个链接套接字,也就是tcpsocket

                QString ip = tcpsocket->peerAddress().toString();  //获取客户端IP
                quint16 port = tcpsocket->peerPort();             //获取客户端端口
                QString ipAndPortMessage = QString("[%1:%2]--成功链接").arg(ip).arg(port);
                ui->messageEdit->setText(ipAndPortMessage);    //在UI上显示成功链接


                connect(tcpsocket,&QTcpSocket::readyRead,          //连接准备读信号
                        [=]
                        {
                            QByteArray array = tcpsocket->readAll();//读所有信息,保存在数组中
                            ui->messageEdit->append(array);          //接收到的信息显示在UI上
                        }

                        );
                connect(tcpsocket,&QTcpSocket::disconnected,      //连接断开信号
                        [=]
                        {
                            ui->messageEdit->setText("客户端"+ip+":"+QString::number(port,10)+"断开");//UI上显示已断开
                        }

                        );
            }
            );


}


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



void ServerWidget::on_sendButton_clicked()//发送按钮
{
    if(tcpsocket==nullptr)
    {
        return;
    }
    QString senMessage;
    senMessage = ui->sendEdit->toPlainText();


    tcpsocket->write(senMessage.toUtf8().data());//发送数据
}


void ServerWidget::on_closeButton_clicked()//断开连接按钮
{
    if(tcpsocket==nullptr)
    {
        return;
    }
    tcpsocket->disconnectFromHost();//断开链接
    tcpsocket->close();
    tcpsocket=nullptr;
}

二、客户端程序

#include "clianwidget.h"
#include "ui_clianwidget.h"
#include <QHostAddress>
ClianWidget::ClianWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ClianWidget)
{
    ui->setupUi(this);
    setWindowTitle("客户端");
    tcpSocket = new QTcpSocket(this);

    connect(tcpSocket,&QTcpSocket::connected,
            [=]
            {
                ui->messageBrowser->setText("已连接");
            }


            );
    connect(tcpSocket,&QTcpSocket::readyRead,
            [=]
            {
                QByteArray array = tcpSocket->readAll();
                ui->messageBrowser->append(array);
            }


            );
    connect(tcpSocket,&QTcpSocket::disconnected,
            [=]
            {
                ui->messageBrowser->setText("与服务器断开");
            }

            );
}


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


void ClianWidget::on_connectButton_clicked()//连接服务器按钮
{
    QString ip = ui->ipEdit->text();
    quint16 port = static_cast<quint16>( ui->portEdit->text().toUInt());
    tcpSocket->connectToHost(QHostAddress(ip),port);//连接服务器
}


void ClianWidget::on_sendButton_clicked()//发送按钮
{
    if(tcpSocket==nullptr)
    {
        return;
    }
    QString senMessage;
    senMessage = ui->sendBrowser->toPlainText();


    tcpSocket->write(senMessage.toUtf8().data());//发送数据
}


void ClianWidget::on_closeButton_clicked()//断开连接按钮
{
    if(tcpSocket==nullptr)
    {
        return;
    }
    tcpSocket->disconnectFromHost();//断开链接
    tcpSocket->close();
   // tcpSocket=nullptr;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 类的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。注意:本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无法直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。注意:本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下:下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)…… ……

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值