qt中socket通信流程图_Qt学习 之 Socket通信(世界上最简单的例子了)
最近写大作业用到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通信(世界上最简单的例子了)相关推荐
- 一组数字中算出最相近的组合_机器学习有意思! 世界上最简单的机器学习入门...
你是否也曾听人们谈起机器学习但是只有一个朦胧的概念?你是否厌倦了在同事的高谈阔论中颓然欲睡?此诚求变之机. 本教程适合所有对机器学习感到好奇,却不知从何下手的读者.我想应该有很多人试着读了维基百科页面 ...
- oracle 列 连续,oracle中某列连续相同值的记录数统计(一个简单的例子)
oracle中某列连续相同值的记录数统计(一个简单的例子) row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 ...
- freeCAD学习笔记一:尝试一个最简单的例子
听说freeCAD是一款优秀的3D制图软件,想尝试一下. 软件主界面 我的笔记 1 新建或打开文件 这个与大部分的软件都差不多,没有什么好说的,新建了一个文件,保存为test1,后来又另存为test2 ...
- qt中实现左右分割线_Qt项目中,实现屏幕截图并生成gif的详细示例(值得细读)...
总第50篇 平时我们在工作和学习的过程中,有时需要将桌面的某些动作截图生成gif动图,以更生动地呈现出来.目前有很多这样的软件,并且方便易使用,比如我经常使用的GifCam,软件小巧,生成的图片文件也 ...
- 【转】QT中窗口刷新事件的学习总结
一.主要理解一下几个方法和属性: 1.QWidget * QScrollView::viewport () const 2.void QWidget::paintEvent ( QPaintEvent ...
- QT中使用OpenGL绘制图形
Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...
- Qt中使用OpenGL进行绘图
Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...
- 【嵌入式小白学习】--在STM32开发板上实现简单的串口通信
嵌入式小白学习--在STM32开发板上实现简单的串口通信 这里写目录标题 嵌入式小白学习--在STM32开发板上实现简单的串口通信 Part1. STM32环境的搭建 Part2. 编写代码 Part ...
- QT中使用C++ socket通信,socket通信原理三次握手和四次握手详解、客户端与服务端实例详解
对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1. 什么是TCP/IP.UDP? 2. Soc ...
- QT中使用C++ socket通信(了解socket通信、socket的三次握手和四次挥手、socket函数说明、客户端与服务端的代码实例)
一.TCP/IP协议四个抽象层: 二.socket位置 socket就在应用程序的传输层和应用层之间,传输层的底一层的服务提供给socket抽象层,socket抽象层再提供给应用层. 三.socket ...
最新文章
- 使用await / async时,HttpClient.GetAsync(...)永远不会返回
- python3 多进程 multiprocessing对僵尸进程的处理
- 【深度学习】nnU-Net(优秀的前处理和后处理框架)
- MIT黑科技:全新芯片将语音识别功耗降低99%
- C语言面试题分享(3)
- 机器学习实践一 logistic regression regularize
- win7系统怎么打开屏幕键盘
- linux mtk unique id,1.2.16.1. Nand Flash的Unique ID
- cmd使用SBT构建scala项目
- python socket编程实例代码(含服务端和客户端)
- 定时任务---Only no-arg methods may be annotated with @Scheduled
- 家长头疼的调皮男孩应该怎么管教
- GNSS/INS组合导航(1)-- 姿态矩阵
- 怎样防止表单重复提交
- php对接腾讯云直播,聊天,im,云录制产生回放
- R语言使用matrix函数创建空矩阵、使用nrow参数和ncol参数指定矩阵的行列数
- 多wan口路由虚拟服务器,简单的多WAN路由器带宽聚合功能测试方案
- Google code的申请方法
- 合成孔径雷达图像中的地物信息
- ERROR in ch.qos.logback.core.joran.spi.Interpreter@8:17 - no applicable action for [Properties], cur