QT实现tcp通信(Client客户端)

服务器端https://blog.csdn.net/txwtech/article/details/125363719?spm=1001.2014.3001.5501

 QT实现tcp通信(Client客户端)QT_TCP_client_full客户端.rar-QT文档类资源-CSDN下载QT_TCP_client_full客户端.rarhttps://blog.csdn.net/tx更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/txwtech/86269838

 

 源文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QtNetwork> //在pro文件里面添加QT+=network

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QString ip = GetLocalIP();
    if(ip.isEmpty())
    {
        QMessageBox::about(this,tr("提示"),tr("没有获取到本机的IP"));
    }
    else
    {
        ui->lineEdit_Local_IP->setText(ip);
    }

       ui->label_hostName->setText(tr("HostName:")+ QHostInfo::localHostName() );
       ui->label_hostName->adjustSize();
       ui->lineEdit_Server_Port->setText(tr("6666")); //默认
       ui->lineEdit_Server_IP->setText (ui->lineEdit_Local_IP->text() );
       ui->pushButton_StartToConnect->setEnabled(true);
       ui->pushButton_Send->setEnabled(false);
       ui->plainTextEdit_Send_Msg->setPlainText("hello I am Client,txwtech客户端");
       //初始化TCP客户端
       tcpClient = new QTcpSocket(this);
       tcpClient->abort();

       connect(tcpClient, SIGNAL(readyRead()), this, SLOT(slot_readData()) );
       connect(tcpClient, SIGNAL(connected()), this, SLOT(slot_connected()) );
       connect(tcpClient, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(slot_error(QAbstractSocket::SocketError)));



}
//读取数据
void MainWindow::slot_readData()
{
    QByteArray buffer = tcpClient->readAll();
    if(!buffer.isEmpty())
    {
        ui->plainTextEdit_Recv_Msg->appendPlainText(QString::fromLocal8Bit(buffer));

    }
}
//连接成功,也可以在方法waitForConnected后面处理。
void MainWindow::slot_connected()
{
    ui->pushButton_StartToConnect->setText("断开");
    ui->pushButton_Send->setEnabled(true);
    ui->pushButton_StartToConnect->setEnabled(true);
    ui->lineEdit_Local_Port->setText( QString::number(tcpClient->localPort()) );
}

//错误处理
void  MainWindow::slot_error(QAbstractSocket::SocketError)
{
    tcpClient->disconnectFromHost();
    ui->pushButton_StartToConnect->setText(tr("连接"));
    ui->pushButton_StartToConnect->setEnabled(true);
    ui->pushButton_Send->setEnabled(false);
    ui->plainTextEdit_Recv_Msg->appendPlainText("服务器已经断开");
    QMessageBox::warning(this,
        tr("提示"),
        tcpClient->errorString(),
        QMessageBox::Ok ,
        QMessageBox::Ok) ;
}


QString MainWindow::GetLocalIP()
{
    QList<QHostAddress> list=QNetworkInterface::allAddresses();
    foreach(QHostAddress address,list)
    {
        if(address.protocol()==QAbstractSocket::IPv4Protocol)
        {
            return address.toString();
        }
    }
    return "";
}

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


void MainWindow::on_pushButton_StartToConnect_clicked()
{
    if(ui->pushButton_StartToConnect->text() == "断开")
        {
            tcpClient->disconnectFromHost();
            if (
                    tcpClient->state() == QAbstractSocket::UnconnectedState \
                    ||(  tcpClient->waitForDisconnected(1000))
               )
            {
                ui->pushButton_StartToConnect->setText("连接");
                ui->pushButton_Send->setEnabled(false);
            }
        }else{
            if(  ui->lineEdit_Server_Port->text().toInt() ==0 ){
                QMessageBox::about(this,tr("提示"),tr("请输入端口号") ) ;
                return;
            }
            tcpClient->connectToHost(ui->lineEdit_Server_IP->text(), ui->lineEdit_Server_Port->text().toInt(),QIODevice::ReadWrite,QAbstractSocket::IPv4Protocol);
            ui->pushButton_StartToConnect->setEnabled(false);
            if( !tcpClient->waitForConnected(5000) ) //只等待4秒
            {
                tcpClient->disconnectFromHost();
                ui->pushButton_StartToConnect->setText(tr("连接"));
                ui->pushButton_StartToConnect->setEnabled(true);
                QMessageBox::warning(this,
                    tr("提示"),
                    tcpClient->errorString(),
                    QMessageBox::Ok ,
                    QMessageBox::Ok) ;
            }
        }


}

void MainWindow::on_pushButton_Send_clicked()
{
    if(  ui->plainTextEdit_Send_Msg->toPlainText().isEmpty() ){
            QMessageBox::about(this,
            tr("提示"),
            tr("发送数据为空")
           ) ;
           return;
        }

      //  tcpClient ->write( ui->plainTextEdit_Send_Msg->toPlainText().toUtf8() );
         tcpClient ->write( ui->plainTextEdit_Send_Msg->toPlainText().toLocal8Bit() );//解决乱码


}

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
     QTcpSocket *tcpClient;
private slots:
    QString GetLocalIP();
    void slot_readData();
    void slot_connected();
    void slot_error(QAbstractSocket::SocketError);
    void on_pushButton_StartToConnect_clicked();
    void on_pushButton_Send_clicked();
};
#endif // MAINWINDOW_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

txwtech笛克特科

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

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

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

打赏作者

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

抵扣说明:

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

余额充值