最近写大作业用到Qt的Socket部分,网上关于这部分的资料都太过复杂,现在总结一下一些简单的应用。有机会可以给大家讲讲用Socket传送文件的代码。

这里主要讲解如何实现TCP和UDP的简单通信。

socket简介

在LINUX下进行网络编程,我们可以使用LINUX提供的统一的套接字接口。但是这种方法牵涉到太多的结构体,比如IP地址,端口转换等,不熟练的人往往容易犯这样那样的错误。QT中提供的SOCKET完全使用了类的封装机制,使用户不需要接触底层的各种结构体操作。而且它采用QT本身的signal-slot机制,使编写的程序更容易理解。

这是文档。个人觉得,QT的文档除了缺少一些例子,其他还是不错的。

QT5中相比于QT4应该更新了一些socket的应用,QT4相比于QT3也更新了不少,而且还改了很多的类名,大家在网上找资料的时候一定要注意。

UDP没有特定的server端和client端,简单来说就是向特定的ip发送报文,因此我把它分为发送端和接收端。

注意:在.pro文件中要添加QT += network,否则无法使用Qt的网络功能。

发送端

#include

QUdpSocket *sender;

sender = new QUdpSocket(this);

QByteArray datagram = “hello world!”;

//UDP广播

sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,6665);

//向特定IP发送

QHostAddress serverAddress = QHostAddress("10.21.11.66");

sender->writeDatagram(datagram.data(), datagram.size(),serverAddress, 6665);

/* writeDatagram函数原型,发送成功返回字节数,否则-1

qint64 writeDatagram(const char *data,qint64 size,const QHostAddress &address,quint16 port)

qint64 writeDatagram(const QByteArray &datagram,const QHostAddress &host,quint16 port)

*/

UDP接收端

#include

QUdpSocket *receiver;

//信号槽

private slots:

void readPendingDatagrams();

receiver = new QUdpSocket(this);

receiver->bind(QHostAddress::LocalHost, 6665);

connect(receiver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));

void readPendingDatagrams()

{

while (receiver->hasPendingDatagrams()) {

QByteArray datagram;

datagram.resize(receiver->pendingDatagramSize());

receiver->readDatagram(datagram.data(), datagram.size());

//数据接收在datagram里

/* readDatagram 函数原型

qint64 readDatagram(char *data,qint64 maxSize,QHostAddress *address=0,quint16 *port=0)

*/

}

}

TCP的话要复杂点,必须先建立连接才能传输数据,分为server端和client端。

TCP client端

#include

QTcpSocket *client;

char *data="hello qt!";

client = new QTcpSocket(this);

client->connectToHost(QHostAddress("10.21.11.66"), 6665);

client->write(data);

TCP server端

#include

QTcpServer *server;

QTcpSocket *clientConnection;

server = new QTcpServer();

server->listen(QHostAddress::Any, 6665);

connect(server, SIGNAL(newConnection()), this, SLOT(acceptConnection()));

void acceptConnection()

{

clientConnection = server->nextPendingConnection();

connect(clientConnection, SIGNAL(readyRead()), this, SLOT(readClient()));

}

void readClient()

{

QString str = clientConnection->readAll();

//或者

char buf[1024];

clientConnection->read(buf,1024);

}

至于传中文乱码的问题,其实可以在前面的文章中解决。

也可以看看这个。

qt中socket通信流程图_Qt学习 之 Socket通信(世界上最简单的例子了)相关推荐

  1. 一组数字中算出最相近的组合_机器学习有意思! 世界上最简单的机器学习入门...

    你是否也曾听人们谈起机器学习但是只有一个朦胧的概念?你是否厌倦了在同事的高谈阔论中颓然欲睡?此诚求变之机. 本教程适合所有对机器学习感到好奇,却不知从何下手的读者.我想应该有很多人试着读了维基百科页面 ...

  2. oracle 列 连续,oracle中某列连续相同值的记录数统计(一个简单的例子)

    oracle中某列连续相同值的记录数统计(一个简单的例子) row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 ...

  3. freeCAD学习笔记一:尝试一个最简单的例子

    听说freeCAD是一款优秀的3D制图软件,想尝试一下. 软件主界面 我的笔记 1 新建或打开文件 这个与大部分的软件都差不多,没有什么好说的,新建了一个文件,保存为test1,后来又另存为test2 ...

  4. qt中实现左右分割线_Qt项目中,实现屏幕截图并生成gif的详细示例(值得细读)...

    总第50篇 平时我们在工作和学习的过程中,有时需要将桌面的某些动作截图生成gif动图,以更生动地呈现出来.目前有很多这样的软件,并且方便易使用,比如我经常使用的GifCam,软件小巧,生成的图片文件也 ...

  5. 【转】QT中窗口刷新事件的学习总结

    一.主要理解一下几个方法和属性: 1.QWidget * QScrollView::viewport () const 2.void QWidget::paintEvent ( QPaintEvent ...

  6. QT中使用OpenGL绘制图形

    Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...

  7. Qt中使用OpenGL进行绘图

    Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...

  8. 【嵌入式小白学习】--在STM32开发板上实现简单的串口通信

    嵌入式小白学习--在STM32开发板上实现简单的串口通信 这里写目录标题 嵌入式小白学习--在STM32开发板上实现简单的串口通信 Part1. STM32环境的搭建 Part2. 编写代码 Part ...

  9. QT中使用C++ socket通信,socket通信原理三次握手和四次握手详解、客户端与服务端实例详解

    对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.         什么是TCP/IP.UDP? 2.         Soc ...

  10. QT中使用C++ socket通信(了解socket通信、socket的三次握手和四次挥手、socket函数说明、客户端与服务端的代码实例)

    一.TCP/IP协议四个抽象层: 二.socket位置 socket就在应用程序的传输层和应用层之间,传输层的底一层的服务提供给socket抽象层,socket抽象层再提供给应用层. 三.socket ...

最新文章

  1. 使用await / async时,HttpClient.GetAsync(...)永远不会返回
  2. python3 多进程 multiprocessing对僵尸进程的处理
  3. 【深度学习】nnU-Net(优秀的前处理和后处理框架)
  4. MIT黑科技:全新芯片将语音识别功耗降低99%
  5. C语言面试题分享(3)
  6. 机器学习实践一 logistic regression regularize
  7. win7系统怎么打开屏幕键盘
  8. linux mtk unique id,1.2.16.1. Nand Flash的Unique ID
  9. cmd使用SBT构建scala项目
  10. python socket编程实例代码(含服务端和客户端)
  11. 定时任务---Only no-arg methods may be annotated with @Scheduled
  12. 家长头疼的调皮男孩应该怎么管教
  13. GNSS/INS组合导航(1)-- 姿态矩阵
  14. 怎样防止表单重复提交
  15. php对接腾讯云直播,聊天,im,云录制产生回放
  16. R语言使用matrix函数创建空矩阵、使用nrow参数和ncol参数指定矩阵的行列数
  17. 多wan口路由虚拟服务器,简单的多WAN路由器带宽聚合功能测试方案
  18. Google code的申请方法
  19. 合成孔径雷达图像中的地物信息
  20. ERROR in ch.qos.logback.core.joran.spi.Interpreter@8:17 - no applicable action for [Properties], cur

热门文章

  1. Java首选项Preferences
  2. 计算机网络 - UDP/TCP、IP、MAC报文协议格式
  3. 正太分布函数 oracle,Oracle随机函数
  4. 黑客语言——Ruby
  5. Springboot开启APR模式
  6. spring事务REQUIRED REQUIRES_NEW区别
  7. java pow_Java pow()方法
  8. C++ 学生信息管理系统课程设计报告
  9. 不要因为错爱而寂寞一生
  10. 揭秘有状态服务上 Kubernetes 的核心技术