【转】Qt Socket简单通信
最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信。
1.UDP通信
UDP没有特定的server端和client端,简单来说就是向特定的ip发送报文,因此我把它分为发送端和接收端。 注意:在.pro文件中要添加QT += network,否则无法使用Qt的网络功能。
1.1.UDP发送端
#include <QtNetwork>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函数原型,发送成功返回字节数,否则-1qint64 writeDatagram(const char *data,qint64 size,const QHostAddress &address,quint16 port)qint64 writeDatagram(const QByteArray &datagram,const QHostAddress &host,quint16 port)*/
1.2.UDP接收端
#include <QtNetwork>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)*/}}
2.TCP通信
TCP的话要复杂点,必须先建立连接才能传输数据,分为server端和client端。
2.1.TCP client端
#include <QtNetwork>QTcpSocket *client;char *data="hello qt!";client = new QTcpSocket(this);client->connectToHost(QHostAddress("10.21.11.66"), 6665);client->write(data);
2.2.TCP server端
#include <QtNetwork>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简单通信的更多相关文章
- 基于TCP 协议的socket 简单通信
DNS 服务器:域名解析 socket 套接字 : socket 是处于应用层与传输层之间的抽象层,也是一组操作起来非常简单的接口(接受数据),此接口接受数据之后,交由操作系统 为什么存在 soc ...
- Python网络编程-Socket简单通信(及python实现远程文件发送)
学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: i ...
- socket简单通信
粗糙简略的初版,后续多加点功能权当练手 /* ============================================================================ ...
- C语言实现Socket简单通信
环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等. 分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客 ...
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- QT socket网络通信
https://blog.csdn.net/u013007900/article/details/50411796 里主要讲解如何实现TCP和UDP的简单通信. socket简介在LINUX下进行网络 ...
- 使用Socket进行通信
客户端通常可使用Socket的构造器来连接到指定服务器,Socket通常可使用如下两个构造器. Socket(lnetAddress/String remoteAddress , int port ...
- java socket报文通信(一)socket的建立
java socket报文通信(一) socket的建立 今天来和大家分享一下java中如何使用socket进行通信.先来啰嗦两句,看看Tcp/ip和udp: TCP是Transfer Contro ...
- Eclipse搭建服务器,实现与Android的简单通信
---恢复内容开始--- 目标:实现客户端(Android App)与服务器(PC)的简单通信 相关准备:eclipse_mars.tomcat8.Android Studio 实现: 1.java环 ...
随机推荐
- 不使用三方包时,如何在ThinkSNS中建立优雅的用户权限管理
什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+).Thin ...
- 黑马旅游网 ajax实现html页面共享
- 9.数据分组 ---SQL
一.创建分组 分组是使用SELECT语句的GROUP BY子句建立的.理解分组的最好办法是看一个例子: SELECT vend_id, COUNT(*) AS num_prods FROM Produ ...
- ES6新特性使用小结(六)
十三.promise 异步编程 ①.使用 promise 模拟异步操作 { //ES5 中的 callback 解决 异步操作问题 let ajax = function (callback) { c ...
- 微服务的.NET Core示例框架
eShopOnContainers 是一个基于微服务的.NET Core示例框架 https://www.cnblogs.com/fengqingyangNo1/p/9438428.html 找到一个 ...
- Token认证登录以及权限控制
IdentityServer4实现Token认证登录以及权限控制 相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的: ...
- Entitas实现简析
Entitas实现简析 这里主要讲Entitas的执行原理,不讲Entitas的代码生成方面. ECS简介 ECS(实体-组件-系统)是一种常用于游戏开发的架构模式. 实体: 实体只是一个 ...
- c++笔记1
using namespace std:命名空间可以保证一些命名能够在全局不冲突.如用户可以通过声明命名空间,然后用运算符::区别同名的不同变量 using namespace std;namespa ...
- SSIS-Dtsx包文件打开时一直验证
把每个项的DelayValidation设置为true. 也可以直接改文件: 把文件里的 <DTS:Property DTS:Name="DelayValidation"&g ...
- 滚动条插件mCustomScrollbar
1. 参考网站 http://www.wufangbo.com/mcustomscrollbar/ 2. 使用方法