QT学习——5.网络编程(TCP)

QT的网络编程有TCP和UDP,本篇文章先讲一下TCP。

TCP编程需要用到两个类,QTcpServer和QTcpSocket,客户端只需要用到后者,服务器两个类都会用到。我们来试一下完成一个服务器和一个客户端

一、服务器制作

1.添加库和头文件

在帮助里面搜QTcpServer和QTcpSocket,可以看到我们需要添加network,和头文件QTcpServer。

新建一个工程,在pro文件修改此行代码

QT       += core gui network
//network为新加字段

在widget.h文件中添加头文件

#include <QTcpServer> 
#include <QTcpSocket>

添加完记得编译一下,没问题就进行下一步。

2.实例化

在widget.h文件中命名

class Widget : public QWidget
{
    Q_OBJECT

public:
    ...
    
    QTcpServer *tcpServer;
    QTcpSocket *tcpSocket;
};

在widget.cpp中new一个实例

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ...
    
    tcpServer=new QTcpServer(this);
    tcpSocket=new QTcpSocket(this);
}
3.布局

因为接收窗口只用来显示收到的数据,所以将其在属性栏首选readOnly。为了方便编程,我们给框改名字。

4.编码

关于三个按键的槽函数,直接在ui界面转到槽进行编写即可。

#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()),this,SLOT(newConnection_Slot()));
}

void Widget::newConnection_Slot()
{
    tcpSocket=tcpServer->nextPendingConnection();
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
}

void Widget::readyRead_Slot()
{
    QString buf;
    buf=tcpSocket->readAll();
    ui->recvEdit->appendPlainText(buf);
}

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


void Widget::on_openBt_clicked()
{
    //QHostAddress::Any监听来自所有人的链接,端口号(转成无符号类型)
    tcpServer->listen(QHostAddress::Any,ui->portEdit->text().toUInt());//开始监听
}

void Widget::on_closeBt_clicked()
{
    tcpServer->close();
}

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

二、客户端制作

1.创建项目

在pro文件中加入network。

在头文件中把TcpSocket库包含进去。

2.布局

修改控件名

3.编码

widget.cpp

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

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

    tcpSocket=new QTcpSocket(this);
}

//关联readyRead信号
void Widget::connected_Slot()
{
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
}

//在此槽函数里面进行读操作
void Widget::readyRead_Slot()
{
    ui->recvEdit->appendPlainText(tcpSocket->readAll());
}

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

void Widget::on_openBt_clicked()
{
    //链接服务器
    tcpSocket->connectToHost(ui->IPEdit->text(),ui->portEdit->text().toUInt());
    //链接成功之后会发送connect信号
    connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_Slot()));
}

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

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

记得在widget.h文件中声明

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpSocket>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

    QTcpSocket *tcpSocket;

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

//声明槽函数
private slots:
    void on_openBt_clicked();
    void connected_Slot();
    void readyRead_Slot();
    void on_closeBt_clicked();
    void on_sendBt_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

三、验证

同时在打开服务器和客户端的QT工程,利用win+r,输入cmd,输入ipconfig查看电脑ip,然后填入客户端中,填写相同的端口号,然后打开服务器和客户端,就可以互相发送数据啦。

tips:

1.如果没有正常运行,查看一下是否已经补充了pro文件、是否在头文件包含了库、已经SLOT函数是不是写进去了是不是声明了。

2.多写几次就会知道,关闭按钮的槽函数很简单,直接close就行,conncet函数的槽函数SOLT()括号里总是得写槽函数的名字,并在头文件中声明,在cpp文件中编写槽函数的具体内容。

3.从Edit写内容时,需要用toLocal8bit().data()转化一下格式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
qt——服务器客户端进行tcp通信代码.rar是一个使用Qt框架编写的用于实现服务器和客户端之间进行TCP通信的程序。TCP是一种高可靠性的传输层协议,通过它可以实现数据的可靠传输,具有较高的传输速度和较低的错误率。在程序,服务器端和客户端都可以进行TCP通信,它们之间通过网络连接进行数据的传输和接收。 在程序,使用了Qt提供的QTcpSocket和QTcpServer两个类来实现TCP通信。QTcpServer类用于实现服务器端,它可以监听指定的端口,等待客户端的连接请求,并实现TCP通信。QTcpSocket类用于实现客户端,它可以主动发起连接请求,并与服务器进行TCP通信。 在程序,服务器端和客户端都实现了数据的发送和接收,通过使用Qt提供的信号和槽机制来实现。信号表示某个事件的发生,槽表示某个事件的响应。当服务器端或客户端有数据发送或接收时,发出相应的信号,程序响应相应的槽来实现数据的发送和接收。 此外,在程序还使用了一些其他的Qt类和模块,如QDataStream、QByteArray和QHostAddress等,来实现数据的封装和解析,IP地址和端口号的管理等功能。 总之,这个qt——服务器客户端进行tcp通信代码.rar是一个优秀的实现TCP通信的程序,通过它可以学习Qt框架的使用,以及实现TCP通信的方法和技巧,对于想要开发网络应用的开发者来说是一个非常有用的代码库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值