QT实现客户端断开连接

这篇具有很好参考价值的文章主要介绍了QT实现客户端断开连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Widget.cpp

#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , socket(new QTcpSocket(this))
{
    ui->setupUi(this);


    //初始化界面
    ui->msgEdit->setEnabled(false); //不可用
    ui->sendBtn->setEnabled(false);
    ui->disconnectBtn->setEnabled(false);




    //如果成功连接到服务器,那么客户端就会自动发射一个connected信号
    //我们就可以将该信号连接到自定义的槽函数中, 由于只需要连接一次,所以连接函数 写在构造函数中
    connect(socket, &QTcpSocket::connected, this, &Widget::connected_slot);


    //如果服务器向客户端发来数据,那么客户端就会自动发射一个readyRead()信号
    //将该信号连接到自定义的槽函数中,读取数据, 由于只需要连接一次,那么连接函数写在构造函数中
   connect(socket, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);


}


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


//连接按钮对应的槽函数处理
void Widget::on_connectBtn_clicked()
{


    //获取到ui界面上的 Ip和端口号
    QString ip = ui->ipEdit->text();


    quint16 port = ui->portEdit->text().toUInt(); //将字符串转换整型


    //客户端连接服务器
    //函数原型:
    //virtual void connectToHost(const QString &hostName, quint16 port, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);


    socket->connectToHost(ip, port);


    //如果成功连接到服务器,那么客户端就会自动发射一个connected信号
    //我们就可以将该信号连接到自定义的槽函数中, 由于只需要连接一次,所以连接函数 写在构造函数中


}




//connected对应槽函数
void Widget::connected_slot()
{
    //告诉服务器 我来了
    //组织语言
    userName = ui->usernameEdit->text();


    QString msg = userName+":进入聊天室";
    //将数据发送服务器
    socket->write(msg.toLocal8Bit());


    //程序运行至此 意味着服务器和客户端成功建立连接
    ui->msgEdit->setEnabled(true);
    ui->sendBtn->setEnabled(true);
    ui->disconnectBtn->setEnabled(true);


    ui->usernameEdit->setEnabled(false);
    ui->portEdit->setEnabled(false);
    ui->connectBtn->setEnabled(false);




    //如果服务器向客户端发来数据,那么客户端就会自动发射一个readyRead()信号
    //将该信号连接到自定义的槽函数中,读取数据, 由于只需要连接一次,那么连接函数写在构造函数中


}




//readyRead()信号对应的槽函数
void Widget::readyRead_slot()
{
    //读取数据
    QByteArray msg = socket->readAll();


    //将读取到的数据放入ui界面上
    ui->listWidget->addItem(QString::fromLocal8Bit(msg));




}


//发送按钮对应的槽函数处理
void Widget::on_sendBtn_clicked()
{
   //获取ui界面上的内容
   QString msg = ui->msgEdit->text();


   //组织语言
   msg = userName + ": " + msg;

   socket->write(msg.toLocal8Bit());

   //清空内容
   ui->msgEdit->clear();

}
void Widget::on_disconnectBtn_clicked()
{

   QString  msg = userName + "退出聊天室" ;
         socket->write(msg.toLocal8Bit());
        socket->disconnectFromHost();

}

Widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QTcpSocket> //客户端类


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE


class Widget : public QWidget
{
    Q_OBJECT


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


private slots:
    void on_connectBtn_clicked();


    void on_sendBtn_clicked();


    void on_disconnectBtn_clicked();

public slots:
    void connected_slot(); //connected对应槽函数声明
    void readyRead_slot(); //readyRead()信号对应的槽函数声明


private:
    Ui::Widget *ui;


    //实例化一个客户端指针
    QTcpSocket *socket;


    //定义一个存储用户的变量
    QString userName;
};
#endif // WIDGET_H

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

QT实现客户端断开连接,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-851540.html

到了这里,关于QT实现客户端断开连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • tcp连接断开分析,判断tcp断开原因是客户端还是服务端?

              当与使用TCP协议对接的硬件设备进行通信时,往往会遇到一些问题,导致一些人难以找到tcp断开的根源,因些无法判定是充电桩设备客户端还是服务器端。我曾经在十多年前对接银行接口的POS机时遇到过类似的情况,现在在对接充电桩时又遇到了相似的问题。经过

    2024年02月03日
    浏览(38)
  • QT TCP客户端实现

    QTcpSocket实例首先是通过connectToHost()尝试连接到服务器,需要指定服务器的IP地址和端口。connectToHost()是异步方式连接服务器,不会阻塞程序运行,连接后发射connected()信号。 如果需要使用阻塞方式连接服务器,则使用waitForConnected()函数阻塞程序运行,直到连接成功或失败。

    2024年02月09日
    浏览(48)
  • QT-TCP客户端发现服务端掉线后如何自动重连接?

    在QT中,可以通过QTcpSocket类实现TCP客户端的网络连接,如果客户端断连后需要实现重连,可以在QTcpSocket的disconnected()信号处理槽中执行重连操作。具体实现步骤如下: 定义QTcpSocket实例变量,在构造函数中初始化并连接相应的信号和槽函数。 构造函数中初始化和连接相应的信

    2024年02月15日
    浏览(125)
  • java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量。

    首先需要知道java里如何创建一个Socket服务器端。 提示:注意server.accept()方法调用会阻塞,只有新的客户端连接后才返回一个新的socket对象。如果一直未连接那么会一直处于阻塞状态 了解了如何创建一个socket服务器端后。那么如何实现给指定的连接客户端发送消息呢?首先我

    2024年02月11日
    浏览(73)
  • 【go】gorilla/websocket如何判断客户端强制断开连接

    当客户端因为某些问题异常关闭连接时,可以判断关闭连接的异常类型 通过调用websocket.IsCloseError或websocket.IsUnexpectedCloseError即可 其中github源码如下 异常类型如下

    2024年02月16日
    浏览(60)
  • 【Qt专栏】Qt实现TCP服务端和客户端通信

    网络通信是程序员必须会的一项生存技能,这里简单的实现了服务端和客户端通信的两个小示例,代码可以直接拿来用,开发环境是Qt5.9.6。 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 好了,两个小程序写完并

    2024年02月12日
    浏览(37)
  • QT实现tcp服务器客户端

    2024年02月07日
    浏览(59)
  • 【QT 网络云盘客户端】——实现文件属性窗口

    目录 文件属性对话框 设置字体样式  获取文件的信息 显示文件属性对话框 当我们点击文件中的属性,则会弹出一个属性对话框:    实现过程: 0. 设置 属性 菜单项的槽函数 。 1.鼠获取鼠标选中的 QListWidgetItem ,它包含 图标 和 文件名 2.根据 文件名 找到对应的 FileInfo对象

    2024年02月15日
    浏览(40)
  • TCP客户端判断与服务端断开连接的几种方法

    目前已知的方法有: 1、 epoll(能检测正常的断开连接,事件触发机制,优点是快速,但是插拔网线是检测不到的) 2、自定义心跳包方式检测 3、keeplive方式检测 4、getsockopt 1、相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,

    2023年04月14日
    浏览(59)
  • 【QT 网络云盘客户端】——登录界面功能的实现

    目录 1.注册账号 2.服务器ip地址和端口号设置 3. 登录功能 4.读取配置文件 5.显示主界面 1.点击注册页面,将数据 输入 到  用户名,昵称,密码,确认密码,手机,邮箱 的输入框中, 点击确定,触发槽函数  on_reg_but_clicked。 2 .on_reg_but_clicked 会校验 各个输入框中 数据格式 的

    2024年02月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包