最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信。

1.UDP通信

UDP没有特定的server端和client端,简单来说就是向特定的ip发送报文,因此我把它分为发送端和接收端。 注意:在.pro文件中要添加QT += network,否则无法使用Qt的网络功能

1.1.UDP发送端

  1. #include <QtNetwork>
  2. QUdpSocket *sender;
  3. sender = new QUdpSocket(this);
  4. QByteArray datagram = “hello world!”;
  5. //UDP广播
  6. sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,6665);
  7. //向特定IP发送
  8. QHostAddress serverAddress = QHostAddress("10.21.11.66");
  9. sender->writeDatagram(datagram.data(), datagram.size(),serverAddress, 6665);
  10. /* writeDatagram函数原型,发送成功返回字节数,否则-1
  11. qint64 writeDatagram(const char *data,qint64 size,const QHostAddress &address,quint16 port)
  12. qint64 writeDatagram(const QByteArray &datagram,const QHostAddress &host,quint16 port)
  13. */

1.2.UDP接收端

  1. #include <QtNetwork>
  2. QUdpSocket *receiver;
  3. //信号槽
  4. private slots:
  5. void readPendingDatagrams();
  6. receiver = new QUdpSocket(this);
  7. receiver->bind(QHostAddress::LocalHost, 6665);
  8. connect(receiver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));
  9. void readPendingDatagrams()
  10. {
  11. while (receiver->hasPendingDatagrams()) {
  12. QByteArray datagram;
  13. datagram.resize(receiver->pendingDatagramSize());
  14. receiver->readDatagram(datagram.data(), datagram.size());
  15. //数据接收在datagram里
  16. /* readDatagram 函数原型
  17. qint64 readDatagram(char *data,qint64 maxSize,QHostAddress *address=0,quint16 *port=0)
  18. */
  19. }
  20. }

2.TCP通信

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

2.1.TCP client端

  1. #include <QtNetwork>
  2. QTcpSocket *client;
  3. char *data="hello qt!";
  4. client = new QTcpSocket(this);
  5. client->connectToHost(QHostAddress("10.21.11.66"), 6665);
  6. client->write(data);

2.2.TCP server端

  1. #include <QtNetwork>
  2. QTcpServer *server;
  3. QTcpSocket *clientConnection;
  4. server = new QTcpServer();
  5. server->listen(QHostAddress::Any, 6665);
  6. connect(server, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
  7. void acceptConnection()
  8. {
  9. clientConnection = server->nextPendingConnection();
  10. connect(clientConnection, SIGNAL(readyRead()), this, SLOT(readClient()));
  11. }
  12. void readClient()
  13. {
  14. QString str = clientConnection->readAll();
  15. //或者
  16. char buf[1024];
  17. clientConnection->read(buf,1024);
  18. }
作者:wuyuan 本文来自Wuyuan's Blog 转载请注明,谢谢! 文章地址: http://wuyuans.com/2013/03/qt-socket

【转】Qt Socket简单通信的更多相关文章

  1. 基于TCP 协议的socket 简单通信

    DNS 服务器:域名解析 socket 套接字 : ​ socket 是处于应用层与传输层之间的抽象层,也是一组操作起来非常简单的接口(接受数据),此接口接受数据之后,交由操作系统 为什么存在 soc ...

  2. Python网络编程-Socket简单通信(及python实现远程文件发送)

    学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: i ...

  3. socket简单通信

    粗糙简略的初版,后续多加点功能权当练手 /* ============================================================================ ...

  4. C语言实现Socket简单通信

    环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等. 分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客 ...

  5. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  6. QT socket网络通信

    https://blog.csdn.net/u013007900/article/details/50411796 里主要讲解如何实现TCP和UDP的简单通信. socket简介在LINUX下进行网络 ...

  7. 使用Socket进行通信

    客户端通常可使用Socket的构造器来连接到指定服务器,Socket通常可使用如下两个构造器. Socket(lnetAddress/String  remoteAddress , int  port ...

  8. java socket报文通信(一)socket的建立

    java socket报文通信(一) socket的建立  今天来和大家分享一下java中如何使用socket进行通信.先来啰嗦两句,看看Tcp/ip和udp: TCP是Transfer Contro ...

  9. Eclipse搭建服务器,实现与Android的简单通信

    ---恢复内容开始--- 目标:实现客户端(Android App)与服务器(PC)的简单通信 相关准备:eclipse_mars.tomcat8.Android Studio 实现: 1.java环 ...

随机推荐

  1. 1.函数的结构,调用,传参,形参,实参,args,kwargs,名称空间,高阶函数

    1.函数的初识 初始函数 获取任意一个字符串的元素的个数 s1='dsjdkjkfefenga' count=0 for i in s1: count+=1 print(count) 获取列表的元素的 ...

  2. SpringBoot2.0 基础案例(03):配置系统全局异常映射处理

    一.异常分类 这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常. 1.业务异常 业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性. 常见的业务 ...

  3. linux 之基本命令学习总结

    前言:从今天开始写这系列linux博客了(是学习刘遄老师的<linux就该这么学>),视频学习的资源可以在b站上找到:https://www.bilibili.com/video/av45 ...

  4. Java基础笔记(五)——数据类型转换

    数据类型的精度由低到高为:byte < short < char < int < long < float < double 低精度的类型与高精度的类型在进行运算时 ...

  5. 【poj3764】The xor-longest Path

    The xor-longest Path Description In an edge-weighted tree, the xor-length of a path p is defined as ...

  6. Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers

    链接:https://codeforces.com/contest/1167/problem/B 题意: This is an interactive problem. Remember to flu ...

  7. 详解window.history

    http://blog.csdn.net/woxueliuyun/article/details/51075272

  8. Win10专业版系统下添加其他国家语言

    Win10专业版系统下如何添加其他国家语言?国内的win10专业版系统默认情况下是安装简体中文,但是有的用户出于工作原因需要使用其它字体.比如外国友人就需要使用英语,西班牙等.其实win10专业版是支 ...

  9. 洛谷P1781 宇宙总统

    https://www.luogu.org/problem/show?pid=1781 高精比较大小: #include<iostream> #include<cstdio> ...

  10. NOPI Excel 读取公式生成后的数据

    using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using S ...