服务器端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