QT客户端和Linux服务器端进行tcp通信:客户端
首先我们建立socket客户端,在创建客户端前,我们需要将.pro文件中链接上network。
如下:
代码运行如下:
QT中的TCP
、
完成客户端窗口时 ,我们需要先在堆区建立一个通信套接字
tcpSoket = new QTcpSocket(this); //创建通信对象
然后我们可以调用connect函数连接我们的服务器连接信号,用来提醒我们完成服务器的连接
connect(tcpSoket,&QTcpSocket::connected,[=]{ ui->textEdit->setText(QString("已成功连接上服务器"));
});
做完这些,我们就要使用我们在qt中设置的按键了
我们首先在connect这个按钮设立槽函数,将我们的端口号与ip地址连接到服务器
//连接
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);}
将我们的端口号将ip地址和端口号发送出去进行连接,直接通过协议栈发送。
连接完成后我们就可以进行信息的发送,设置sendbuf按钮的槽函数
void MainWindow::on_pushButton_2_clicked()
{
//如果通信套接字为空,不给予通信流程
if(nullptr == tcpSoket){
return;
}
QString str = ui->textEdit->toPlainText();
tcpSoket->write(str.toUtf8().data());
ui->textEdit->clear();
}
我们使用toPlainText()函数将文本内容进行读取,通过write函数将我们的信息发出,注意发出时我们需要将str的类型转换为char类型便于服务器的读取。
还有我们的断开连接功能 设置disconnect按钮的槽函数
void MainWindow::on_pushButton_3_clicked()
{
if(nullptr == tcpSoket){
return;
}
tcpSoket->disconnectFromHost();
tcpSoket->close();
tcpSoket = nullptr;
}
使用disconnectFromHost();函数将其断开连接并关闭我们的套接字
代码如下:
-
-
-
-
-
-
-
-
-
-
-
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;
-
};
-
-
-
-
-
-
-
-
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;
-
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiegcfb
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信提示登录环境异常是什么意思原因
PHP中文网 04-09 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
微信人名旁边有个图标有什么用
PHP中文网 03-11