原创 DeRoy 2020-08-15

收录于话题

#QT项目实战

11个

点击蓝字关注我们

基于Qt网络编程客户端

QTcpSocketQTcpSocket 类提供一个TCP套接字TCP是一个面向连接,可靠的的通信协议,非常适合于连续不断的数据传递

QTcpSocket 是QAbstractSocket类非常方便的一个子类,让你创建一个TCP连接和数据流交流。

QTcpSocket 信号:readyRead()//有数据发送过来时触发该信号

disconnected()//socket->close()触发disconnected()信号,客户端服务端都触发

配置

pro文件添加QT += network

Public

connectToHost()连接服务器,参数为服务器地址和端口号

waitForConnected设置等待连接,设置超时时间QString ipAddressStr = ui->lineEditAddress->text();

quint16 port = ui->lineEditPort->text().toInt();

socket->connectToHost(ipAddressStr, port);

if(socket->waitForConnected(3000))

{

//连接成功

qDebug() << "connect secess";

}

else

{

qDebug() << socket->errorString();

return;

}

SIGNAL

disconnected()

Socket close信号,当socket执行close函数之后出发信号connect(socket, SIGNAL(disconnected()),this,SLOT(disconnectedSlot()));//客户端断开连接

readyRead()当服务端有数据发送过来的时候触发该信号connect(socket, SIGNAL(readyRead()),this, SLOT(readyReadSlot())); //接收消息QByteArray dataBa = socket->readAll();

UI设计

客户端UI设计

TcpClient项目训练

widget.h#ifndef WIDGET_H

#define WIDGET_H

#include

#include

#include

#include

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

Q_OBJECT

public:

explicit Widget(QWidget *parent = nullptr);

~Widget();

private slots:

void on_pushButtonConnect_clicked();

void disconnectedSlot();

void readyReadSlot();

void on_pushButtonSend_clicked();

private:

Ui::Widget *ui;

QTcpSocket *socket;

bool socketState;

};

#endif // WIDGET_H

widget.cpp#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

socket = new QTcpSocket;

socketState = false;

connect(socket, SIGNAL(disconnected()),this, SLOT(disconnectedSlot()));     //客户端断开连接

connect(socket, SIGNAL(readyRead()),this, SLOT(readyReadSlot()));           //接收消息

}

Widget::~Widget()

{

delete ui;

}

void Widget::on_pushButtonConnect_clicked(){

QString ipAddressStr = ui->lineEditAddress->text();

quint16 port = ui->lineEditPort->text().toInt();

if(!socketState)

{

socket->connectToHost(ipAddressStr, port);

if(socket->waitForConnected(3000))

{

qDebug() << "Connect2Server OK";

ui->pushButtonConnect->setText("断开连接");

socketState = true;

}

else

{

qDebug() << socket->errorString();

return;

}

}

else

{

socket->close();

ui->pushButtonConnect->setText("连接");

socketState = false;

}

}

void Widget::disconnectedSlot(){

qDebug()<

}

void Widget::readyReadSlot(){

QByteArray dataBa = socket->readAll();

QString str = QString(QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss ddd")) +

":Recv\n" + str.fromLocal8Bit(dataBa.data());    //本地GBK转Unicode 解决乱码

ui->textBrowserRecv->append(QString(str));          //送显示

}

void Widget::on_pushButtonSend_clicked(){

QString dataStr = ui->textEditSend->toPlainText();

//QByteArray data = dataStr.toUtf8();        //发送UTF编码数据

QByteArray data = dataStr.toLocal8Bit();     //发送本地字符(GBK)

if(socket->isOpen() && socket->isValid())

{

socket->write(data);

}

QString str = QString(QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss ddd")) +

":Recv\n" + str.fromLocal8Bit(data.data());    //本地GBK转Unicode 解决乱码

ui->textBrowserRecv->append(QString(str));          //送显示

}

qt linux 聊天室,Qt网络聊天室客户端相关推荐

  1. qt客户端显示服务器发送的图片不显示,使用Qt将一系列图片通过网络发送到客户端动态显示...

    <使用Qt将一系列图片通过网络发送到客户端动态显示>由会员分享,可在线阅读,更多相关<使用Qt将一系列图片通过网络发送到客户端动态显示(8页珍藏版)>请在人人文库网上搜索. 1 ...

  2. Linux C多人网络聊天室

    经过好几天的日夜奋斗,总算把这个聊天室给做出来了,虽然说不上多好,但也是这几天从早到晚劳动的成功,所以就写这篇博文来记录一下啦.别的不敢说,确保能用就是了,完整代码在最后哦~ 当然啦,如果有幸被转发, ...

  3. Linux C/TCP多线程网络聊天室

    多线程TCP网络聊天室 我们都知道TCP是一种基于连接的传输协议,使用多线程来实现其实步骤很简单. 首先说明一下项目:服务端开启后,直接运行客户端可以加入聊天室,同时其他客户端可以接收到某某客户端进入 ...

  4. linux 移植qt,Linux下移植QT(2)---移植QT

    准备:ubantu12.04   内核 3.0.8(最好用同样的内核,3.2.0时没成功) 交叉编译工具:arm-cortex_a8-linux-gnueabi-gcc-4.4.6 QT版本5.4.2 ...

  5. qt linux 多语言,Qt跨平台(window、linux)实现多语言

    在项目中,实现多语言基本山是基本需求,虽然Qt支持跨平台,但在linux和windows上实现多语言的方式还是细微区别的,废话不多说,直接进入主题吧. Qt实现多语言,是用过QTranslator加载 ...

  6. qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介

    一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...

  7. ubuntu qt linux 下载文件,Qt ------ linux(ubuntu) 下用 linuxdeployqt 打包发布程序

    https://github.com/probonopd/linuxdeployqt/releases github上提供了两种安装linuxdeployqt的方法,分别是直接下载编译好的安装包安装, ...

  8. linux强行卸载qt,Linux下卸载QT SDK

    unbuntu下卸载QT 方法一: you can remove it like this, those developers should add this somewhere ! like nex ...

  9. qt linux cpu id,Qt獲取CPU編號和硬盤序列號

    windows下執行命令除了用cmd之外,還有個東西叫WMIC,非常強大,可以通過他獲取很多信息,包括硬件信息. QString frmMain::getWMIC(const QString & ...

  10. 基于linux网络聊天室的设计,参考基于linux网络聊天室的设计.doc

    参考基于linux网络聊天室的设计 长沙理工大学<高级操作系统>课程设计报告学 院 计算机与通信工程 专 业 计算机科学与技术 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 课程 ...

最新文章

  1. 分辨5线单极性步进电机接头
  2. java程序设计 徐红_Java程序设计-徐红 王灿
  3. java 内存模型堆和本地方法
  4. h3c 路由器 刷第三方固件_图文版*许迎果 第201期 双11路由器型号推荐之刷机路由篇...
  5. How to use price determination in Quotation scenario
  6. 盘点:最值得托付终身的星座
  7. mysql复制主从集群搭建
  8. 软件发布版本命名规则
  9. Python之subprocess模块
  10. 金三银四大厂面经总结,mysql创建视图的sql语句
  11. Linux现在已主导Azure
  12. 网络安全实战之靶场渗透技术
  13. 软考软件设计师本人成功备考经验分享
  14. imdb数据集电影评论分类
  15. 电子邮件链接格式html主题,html创建电子邮件链接的方法
  16. 网络通信中 TCP 产生 RST 的三个条件分析
  17. 2021-10-18墨画子卿第一章
  18. 现代信号处理笔计 4 线性估计
  19. FrankenUPS Hack将服务器UPS变成整机UPS
  20. Docker学习之路04:创建定制Nginx镜像

热门文章

  1. 按群计数10以内_大班数学活动:按群计数
  2. python数组加入新元素_Python之list添加新元素、删除元素、替换元素
  3. 接口使用jwt返回token_JWT实现token验证
  4. wordpress 表格文字对齐_Word文字对齐还用空格键?OUT了,这3个文字对齐方式你值得拥有!...
  5. python目录及文件_零基础小白必看:python基本操作-文件、目录及路径
  6. oracle ora-24247 ACL,ORACLE 11G 存储过程发送邮件(job),ORA-24247:网络访问被访问控制列表 (ACL) 拒绝...
  7. 系统接口对接的进度工作应该谁来干_项目的交付进度总是延迟,项目经理找了很久才发现是这4类原因...
  8. python调用java方法_python加载和使用java的类的方法
  9. arm-linux-gcc编译gtk程序,【又7】Arm 版GTK编译
  10. 在Windows系统安装Nodejs