运行截图如下:

代码如下:

客户端:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QAbstractSocket>
class QTcpSocket;namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;QString m_message;QTcpSocket *m_tcpSocket;quint16 m_blockSize;  //存放数据大小private slots:void newConnect();void readMessage();void displayError(QAbstractSocket::SocketError);void connectBtnClicked();};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QtNetwork>
#include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_tcpSocket=new QTcpSocket(this);connect(m_tcpSocket,&QTcpSocket::readyRead,this,&Widget::readMessage);connect(m_tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));connect(ui->connectPushButton,&QPushButton::clicked,this,Widget::connectBtnClicked);
}void Widget::newConnect(){m_blockSize=0;m_tcpSocket->abort();m_tcpSocket->connectToHost(ui->hostLineEdit->text(),ui->portLineEdit->text().toInt());
}void Widget::readMessage(){QDataStream in(m_tcpSocket);in.setVersion(QDataStream::Qt_5_7);if(m_blockSize==0){if(m_tcpSocket->bytesAvailable()<(int)sizeof(quint16))return;in>>m_blockSize;}if(m_tcpSocket->bytesAvailable()<m_blockSize) return;in>>m_message;qDebug()<<"message:"<<m_message;ui->listWidget->insertItem(0,m_message);
}void Widget::displayError(QAbstractSocket::SocketError){qDebug()<<m_tcpSocket->errorString();
}void Widget::connectBtnClicked(){newConnect();
}Widget::~Widget()
{delete ui;
}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

服务端:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
class QTcpServer;namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;QTcpServer *m_tcpServer;private slots:void sendMessage();
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QtNetwork>
#include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_tcpServer=new QTcpServer(this);if(!m_tcpServer->listen(QHostAddress::LocalHost,10086)){qDebug()<<m_tcpServer->errorString();close();}connect(m_tcpServer,&QTcpServer::newConnection,this,&Widget::sendMessage);
}Widget::~Widget()
{delete ui;
}void Widget::sendMessage()
{QByteArray block;QDataStream out(&block,QIODevice::WriteOnly);out.setVersion(QDataStream::Qt_5_7);out<<(quint16)0;out<<QString::fromUtf8("你妹");out.device()->seek(0);out<<(quint16)(block.size()-sizeof(quint16));QTcpSocket *clientConnection=m_tcpServer->nextPendingConnection();connect(clientConnection,&QTcpSocket::disconnected,clientConnection, &QTcpSocket::deleteLater);clientConnection->write(block);clientConnection->disconnectFromHost();ui->label->setText("发送数据成功");
}

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学习笔记-简单的TCP程序相关推荐

  1. Qt学习笔记-简单的UDP广播包聊天室

    运行截图如下: 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> class QUdpSocket; ...

  2. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  3. Qt学习笔记之国际化

    国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程. 1. 相关的Qt类和AP ...

  4. QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)

    QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64) 1.编译方式介绍: 2.动态编译方式打包发布QT程序: 方法一:手动复制 方法二:使用工具 问题& ...

  5. QT学习笔记(二):QT MinGW 和 MSVC 编译方式

    QT学习笔记(二):QT MinGW 和 MSVC 编译方式 Qt 中有两种方式编译:一种是MinGW ,另一种MSVC,是使用两种不同的编译器. 1.MSVC是指微软的VC编译器: 2.MingGW ...

  6. QT学习笔记之对话框

    QT学习笔记之对话框 对话框是一种用户界面(窗口),它的主要功能是输出信息和接收用户的输入.在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互. 1)       模式对话框:用户只能与 ...

  7. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

  8. 【QT学习笔记】基于QT的天气预报

    [QT学习笔记]基于QT的天气预报 前言 那就开始吧! 先看一下效果 颜面最重要,画个UI 构造实现 怎么开始? 开始解析数据 关于城市切换 ok 最后源码献上 感谢 前言 学习qt已经有一段时间了, ...

  9. QT 学习笔记(六)

    文章目录 一.设计器的使用 二.常用控件 1. Containers 容器类 2. Input Widgets 输出控件 3. Display Widgets 显示类控件 三.代码和运行结果 1. 主 ...

最新文章

  1. 【408预推免复习】计算机组成原理之存储器
  2. 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
  3. 除了鸿蒙还注册,除了“华为鸿蒙”,你不知道的是,整本山海经都被华为注册了...
  4. 《设计师要懂心理学》-第四章-人如何思考
  5. NET问答: 如何记录 EntityFramework 中的所有 SQL 日志 ?
  6. JS函数中的arguments
  7. 卷积神经网络流程图_卷积神经网络
  8. CentOS安装tengine(淘宝服务器)
  9. MAC安装maven步骤
  10. 计算机操作系统|汤小丹|第四版|习题答案(六)
  11. 想要利用定时器的定时功能输出一个占空比 0.5(一半高电平一半低电平)的方波,并在示波器中显示出来,但是用proteus仿真示波器没有反应 大家帮我看看哪错了
  12. android xutils加密,xutils
  13. ImageOptim图片压缩工具免费版
  14. ESD问题案例分析-智能手表为例
  15. 【嵌入式】---- 单片机常用单位
  16. 博通的网卡linux驱动,CentosRedhat下bcm43142博通无线网卡linux驱动
  17. Python爬虫之链家二手房数据爬取
  18. 金属按钮开关如何接线
  19. 强化学习笔记:强化学习的约束
  20. 52、疏散楼梯的设计要求

热门文章

  1. 什么是事务(Transaction)
  2. 【干货】顶级 Java 源码教程项目大汇总!
  3. 一个职场小白想当程序员,该从哪学起?做好三大准备,完全不是问题!
  4. 智能算法!数据平台自动生成报表,智慧景区的可视化有什么不同
  5. 用DirectionalViewPager代替ViewPager
  6. 飞鸽传书2011真正把用户利益放在股东的利益
  7. 醒醒吧!送给那些盲目自学的人
  8. 前端人职场发展的 6 个方向
  9. 女程序员口述:我活最好,年薪35万!
  10. java写的学生信息查询系统_Java编写学生信息查询系统,报错!!!