基于Qt的TCP实现通信

本文实例为大家分享了基于Qt的TCP实现通信的具体代码,供大家参考,具体内容如下

一、tcp介绍

TCP是面向连接的可靠传输的协议,协议规定通信的双方是服务端和客户端的两个角色:
服务端:负责监听网络端口,等待客户端的连接,用连接的socket完成信息的交互;
客户端:负责每次连接的发起,建立连接后才可以进行通信;

二、界面设计

服务器端

客户端

三、具体程序设计

(1)服务器端设计

1、建立一个工程,工程名为tcpserver,类名为server。在.pro文件中加入如下代码并保存。

QT       += network

2、进入server.h,添加类的前置声明

class QTcpServer;   //QTcpServer类的前置声明
class QTcpSocket;   //QTcpSocket类的前置声明

添加私有对象指针

QTcpServer *tcpServer;          //添加QTcpServer私有对象指针
QTcpSocket *socket;             //添加QTcpSocket私有对象指针

添加私有槽声明

 void tcpServer_connect();       //连接函数
 void read_data();               //读取从client发来的信息
 void disconnected();            //断开连接
 void on_sendButton_clicked();   //发送数据函数

3、转到server.cpp文件中

添加头文件#include,然后编写构造函数构造函数

Server::Server(QWidget *parent) :            //构造函数
    QDialog(parent),
    ui(new Ui::Server)
{
    ui->setupUi(this);
    tcpServer = new QTcpServer(this);                                             //创建对象
    if(!tcpServer->listen(QHostAddress::LocalHost,6666))                          //调用listen监听到来的连接,一旦有客户端连接到服务器,就发射newConnection信号
    {
        qDebug()<<tcpServer->errorString();
        close();
    }
    ui->sendButton->setEnabled(false);                                            // 设置按钮初始值值为false状态,即不可用
    connect(tcpServer,&QTcpServer::newConnection,this,&Server::tcpServer_connect);//将newConnection信号与槽函数连接起来
}

槽函数

//发送数据槽函数
void Server::on_sendButton_clicked()
{
    socket->write(ui->sendText->toPlainText().toLocal8Bit());      //通过write函数发送数据
    socket->flush();
    ui->sendText->clear();
}

//确认连接
void Server::tcpServer_connect()
{
    socket=tcpServer->nextPendingConnection();
    QObject::connect(socket,&QTcpSocket::readyRead,this,&Server::read_data);    //当接收缓冲区有信号到来时,产生readyRead信号
    QObject::connect(socket,&QTcpSocket::disconnected,this,&Server::disconnected);//当接收到dinconnected信号时,执行disconnected函数
    ui->sendButton->setEnabled(true);          //按钮设置为有效
    ui->label->setText(tr("连接成功!"));
}

//读取客户端发送的数据
void Server::read_data()
{
    QByteArray buffer=socket->readAll();           //读取的数据放入QByteArray对象中
    ui->recText->append(QString::fromLocal8Bit(buffer));       //将数据显示出来
}

void Server::disconnected()
{
    ui->sendButton->setEnabled(false);        //断开连接后按钮值设置为无效
}

(2)客户端设计

1、建立一个工程,工程名为tcpclient,类名为client。在.pro文件中加入如下代码并保存。

QT       += network

2、进入client.h,添加类的前置声明

class QTcpSocket;     //QTcpSocket类的前置声明

定义一个套接字对象指针

QTcpSocket *tcpSocket;       //定义一个套接字对象指针

添加私有槽函数声明

 void readData();                 //读取函数
 void discon();                   //断开连接
 void on_connectButton_clicked(); //连接按钮槽函数
 void on_sendButton_clicked();    //发送按钮槽函数

3、转到client.cpp,

添加头文件#include,并编写构造函数

Client::Client(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Client)
{
    ui->setupUi(this);
    tcpSocket = new QTcpSocket(this);          //定义套接字对象

    //关联信号到自定义的槽上
    QObject::connect(tcpSocket,&QTcpSocket::readyRead,this,&Client::readData);          //有接收数据时,执行读函数
    QObject::connect(tcpSocket,&QTcpSocket::disconnected,this,&Client::discon);
    ui->sendButton->setEnabled(false);
}

槽函数

void Client::discon()
{
    ui->sendButton->setEnabled(false);
    ui->connectButton->setText(tr("取消连接"));

}

//点击连接按钮,开始创建连接
void Client::on_connectButton_clicked()
{
    if(ui->connectButton->text()==tr("连接"))
    {
        tcpSocket->abort();
        tcpSocket->connectToHost(ui->hostLineEdit->text(),ui->portLineEdit->text().toInt());//连接到指定主机的端口
        if(!tcpSocket->waitForConnected(30000))                                             //超时连接失败
        {
            qDebug()<<"Connection failed!";
            return;
        }
        qDebug()<<"Connection successfully!";
        ui->connectButton->setText("取消连接");
        ui->sendButton->setEnabled(true);
    }
    else
    {
        tcpSocket->disconnectFromHost();
        ui->connectButton->setText("连接");
        ui->sendButton->setEnabled(false);
    }
}

//点击发送数据
void Client::on_sendButton_clicked()
{
    QString sendData=ui->sendText->toPlainText();                                           //发送数据为文本框的的内容
    tcpSocket->write(sendData.toLocal8Bit());
    tcpSocket->flush();
    ui->sendText->clear();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • QT网络编程Tcp下C/S架构的即时通信实例

    先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include <QDialog> #include <QListWidget> #include <QLineEdit> #include <QPushButton> #include <QLabel> #include <QGridLayout> #include <QtNetWo

  • Qt中TCP协议通信详解

    TCP协议是经常使用的通信方式.在QT中做了非常友好的封装,使用非常方便. 需要添加的模块:network Qt中的TCP类:QTcpSocket , QTcpServer 常用函数介绍 连接目标地址和端口 virtual void QTcpSocket ::connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite); 发送数据 inline qint64 QTcpSocket ::wri

  • QT实现简单TCP通信

    本文实例为大家分享了QT实现简单TCP通信的具体代码,供大家参考,具体内容如下 开发环境:win7开发软件:Qt5.5.0下图是实现效果 首先点击客户端的connect与服务器连接,连接成功后再服务器会显示“成功连接”,然后在客户端会显示“成功与服务器建立连接”,然后我们就可以分别在服务器和客户端向对方发送数据了. 1 TCP介绍 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 在QT中的网络编程的过程如下

  • QT TCP实现简单的通信示例

    本文实例为大家分享了QT TCP实现简单通信示例的具体代码,供大家参考,具体内容如下 TCP服务端: 第一步: 创建监听套接字的QTcpSever QTcpServer *m_tsTcpServer; 第二步: listen------监听是否有新的连接进来 int iMyport;如果有新的客户端连接的话,会触发信号newConnection(),定义一个槽函数接收连接好的套接字. //监听的端口号 iMyport = iPort; //判断是否接收到了新的连接 if(m_tsTcpServe

  • Qt网络编程之TCP通信及常见问题

    本文为作者在开发项目时对Qt的TCP通信部分的总结,主要包含TCP服务器收发数据的demo,解决TCP拆包和黏包问题的解决方案,以及对接收到的QByteArray数据的转换. 简介 TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接,也就是我们常听到的三次握手.TCP的目的是实现快速.安全的信息传递,因此在协议中针对针对数据安全做了很多处理,很适合应用在一些对安全性要求高的场合.而UDP是非连接的协

  • Qt网络编程实现TCP通信

    Qt网络编程实现TCP通信,供大家参考,具体内容如下 标签(空格分隔): Tcp通信 一.Tcp简介 (1)TCP(Transmission Control Protocol,传输控制协议)TCP是一个用于数据传输的传输层网络协议,多个网络协议包括(HTTP和FTP都是基于TCP协议),TCP是面向数据流和连接的可靠的传输协议,它区别于传输层的另外一个协议UDP(具体可看—Qt简单实现UDP通信) . (2)QTcpSocket继承自QAbstractSocket,与QUdpSocket传输的数

  • 基于QT的TCP通信服务的实现

    目录 一.结构 1.1 套接字 1.2 socket通信流程 1.3 QTcpsocket 1.4 QTcpServer 二.设计UI 2.1 客户端UI 2.2 服务器端UI 三.核心代码 四.效果图 一.结构 1.1 套接字 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字

  • QT网络通信TCP客户端实现详解

    本文实例为大家分享了QT网络通信TCP客户端实现的具体代码,供大家参考,具体内容如下 QT中基于TCP套接字的网络通信需要用到两个类 QTcpServer:服务器类,用于监听客户端连接和客户端建立连接 QTcpSocket:通信套接字类,客户端和服务端都需要使用* 这两个类都属于网络通信的network需要在工程路径下添加network QT += core gui network 服务器 mainwindow.cpp #include "mainwindow.h" #include

  • QT5实现简单的TCP通信的实现

    目录 一.客户端 二.服务器 三.运行结果 这段时间用到了QT的TCP通信,做了初步的学习与尝试,编写了一个客户端和服务器基于窗口通信的小例程. 使用QT的网络套接字需要.pro文件中加入一句: QT += network 一.客户端 1.客户端的代码比服务器稍简单,总的来说,使用QT中的QTcpSocket类与服务器进行通信只需要以下5步: (1)创建QTcpSocket套接字对象 socket = new QTcpSocket(); (2)使用这个对象连接服务器 socket->connec

  • QT编写tcp通信工具(Client篇)

    本文实例为大家分享了QT编写tcp通信工具的具体实现代码,Client篇,供大家参考,具体内容如下 1.说明 使用qt写一个类似网上常见的网络调试工具.此篇为Client端.下一遍再写Server端. 2.基本流程 Client端相对简单:创建QTcpSocket对象,为对象的readyRead,error,connected(可选)分别写槽函数,以处理读数据,错误,连接成功三个事件. 连接使用对象的connectToHost方法,断开使用disconnectFromHost方法. 程序不做编码

随机推荐