#ifndef MAINWINDOW_H #define MAINWINDOW_H

#include #include #include #include #include

namespace Ui { class MainWindow; }

class MainWindow : public QMainWindow { Q_OBJECT

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

private slots: void on_pushButton_clicked();

void on_pushButton_2_clicked();

void on_pushButton_3_clicked();

private: Ui::MainWindow *ui; QTcpSocket * tcpSoket; };

#endif // MAINWINDOW_H

#include "mainwindow.h" #include "ui_mainwindow.h" #include

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); tcpSoket = nullptr; tcpSoket = new QTcpSocket(this); //创建通信对象

setWindowTitle('socket客户端');

connect(tcpSoket,&QTcpSocket::connected,[=]{
    ui->textEdit->setText(QString('已成功连接上服务器'));

});


connect(tcpSoket,&QTcpSocket::readyRead,[=]{
    QByteArray array = tcpSoket->readAll();

    ui->textEdit->append(array);

});

}

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

//连接 void MainWindow::on_pushButton_clicked() { if(nullptr == ui->lineEdit|| nullptr == ui->lineEdit_2){ qDebug() << '错误:端口号或ip地址为空'; return; }

QString str = ui->lineEdit->text();
qint16 port = ui->lineEdit_2->text().toInt();

//通信套接字,通过协议栈触发
tcpSoket->connectToHost(str,port);

}

void MainWindow::on_pushButton_2_clicked() { //如果通信套接字为空,不给予通信流程 if(nullptr == tcpSoket){ return; } QString str = ui->textEdit->toPlainText();

tcpSoket->write(str.toUtf8().data());
ui->textEdit->clear();

}

void MainWindow::on_pushButton_3_clicked() { if(nullptr == tcpSoket){ return; }

tcpSoket->disconnectFromHost();

tcpSoket->close();

tcpSoket = nullptr;

} 这段代码是一个简单的socket客户端程序,用于连接服务器并发送数据。从代码上看,逻辑上是合理的,没有明显的错误。但需要注意以下几点:

  1. 在连接服务器之前,应该先判断lineEdit和lineEdit_2是否为空,以避免空指针异常。
  2. 在发送数据之前,也应该判断tcpSocket是否为空,以避免空指针异常。
  3. 在连接成功后,可以在连接的槽函数中添加一些相关的操作,比如显示连接成功的提示信息。
  4. 在接收数据的槽函数中,可以对接收到的数据进行处理,比如解析、显示等。
  5. 在断开连接时,应该先判断tcpSocket是否为空,以避免空指针异常。

除了以上几点需要注意,代码整体上是合理的,可以正常运行。

Qt Socket 客户端示例:连接服务器、发送数据、接收数据

原文地址: http://www.cveoy.top/t/topic/fCrs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录