QT 网络编程二(UDP版本)
- QT的UdpSocket接收消息使用原则
- 第一步:new一个UdpSocket
- 第二步:调用UdpSocket的bind方法,同时指定端口号
- 第三步:使用connect将接收消息函数和UdpSocket对象做关联
- 第四步:在接受消息槽函数当中调用readDatagram接收消息
- 接收消息
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QWidget>
- #include <QUdpSocket>
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- Widget(QWidget *parent = );
- ~Widget();
- void mydatasend();
- private:
- QUdpSocket *udpsocket;
- private slots:
- void mydatarecv();
- };
- #endif // WIDGET_H
- #include "widget.h"
- #include <QHostAddress>
- #include <QMessageBox>
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- {
- udpsocket=new QUdpSocket(this);
- /*指定绑定端口号,接收消息必须绑定端口号,发送消息则不需要绑定*/
- udpsocket->bind();
/*取消绑定端口号使用:udpsocket->close()方法*/- /*readyRead()表示有消息到来这个信号*/
- connect(udpsocket,SIGNAL(readyRead()),this,SLOT(mydatarecv()));
- }
- void Widget::mydatarecv()
- {
- char buf[]={};
- /*判断是否有消息*/
- while(udpsocket->hasPendingDatagrams())
- {
- udpsocket->readDatagram(buf,sizeof(buf));
- QMessageBox::information(this,"消息",buf);
- memset(buf,,sizeof(buf));
- }
- }
- void Widget::mydatasend()
- {
- //
- }
- Widget::~Widget()
- {
- }
- 发送消息
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QWidget>
- #include <QUdpSocket>
- #include <QPushButton>
- #include <QLineEdit>
- #include <QLabel>
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- Widget(QWidget *parent = );
- ~Widget();
- private:
- QUdpSocket *udpsocket;
- QPushButton *btn1;
- QLineEdit *edit1;
- QLineEdit *edit2;
- QLabel *label1;
- void mysenddata();
- private slots:
- void btn_click();
- };
- #endif // WIDGET_H
- #include "widget.h"
- #include <QHostAddress>
- #include <QGridLayout>
- #include <QMessageBox>
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- {
- udpsocket=new QUdpSocket(this);
- btn1=new QPushButton(tr("点击"));
- edit1=new QLineEdit();
- edit2=new QLineEdit();
- label1=new QLabel(tr("目标IP"));
- QGridLayout *lay1=new QGridLayout(this);
- lay1->addWidget(btn1,,);
- lay1->addWidget(edit1,,);
- lay1->addWidget(edit2,,);
- lay1->addWidget(label1,,);
- connect(btn1,SIGNAL(clicked()),this,SLOT(btn_click()));
- }
- Widget::~Widget()
- {
- }
- void Widget::btn_click()
- {
- mysenddata();
- }
- void Widget::mysenddata()
- {
- QString stext=edit1->text();
- QHostAddress *serverip=new QHostAddress();
- //获取目标IP地址
- QString ipstr=edit2->text();
- if(ipstr.isEmpty())
- {
- QMessageBox::critical(this,"错误信息","ip地址不可以为空!");
- return;
- }
- serverip->setAddress(ipstr);
- char buf[]={};
- strncpy(buf,stext.toStdString().data(),sizeof(buf));
- udpsocket->writeDatagram(buf,strlen(buf),*serverip,);
- delete serverip;
- edit1->clear();
- }
QT 网络编程二(UDP版本)的更多相关文章
- Qt网络编程QTcpServer和QTcpSocket的理解
前一段时间通过调试Qt源码,大致了解了Qt的事件机制.信号槽机制.毕竟能力和时间有限.有些地方理解的并不是很清楚. 开发环境:Linux((fedora 17),Qt版本(qt-everywhere- ...
- Linux网络编程(二)
Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...
- 网络编程 单纯UDP通信
网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> #include & ...
- java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式)
java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式) * TCP* 特点:面向连接,点对点的通信,效率较低,但安全可靠* UDP:用户数据报协议,类似 ...
- iOS 网络编程 TCP/UDP HTTP
一.HTTP协议的主要特点: 1. CS模式 2. 简单快速:只需要传送请求方法和路径.(常用方法有GET,HEAD,POST) 3. 灵活:任意对象都可以,类型由Content-Type加以标记 4 ...
- C#网络编程二:Socket编程
一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...
- Linux 网络编程二(Socket创建)
TCP通信 一个程序使用套接字需要执行4个步骤. --分配套接口和初始化 --连接 --发送或接收数据 --关闭套接字 涉及到的调用包括socket.bind.listen.connect(阻塞线程) ...
- TCP/IP协议网络编程以及UDP和TCP之传输协议
1.什么是TCP/IP协议? 网络编程协议有很多,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal 传输控制协议/英特网 ...
- Java网络编程二:Socket详解
Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...
随机推荐
- 在FlashDevelop里使用1.8版本的的TortoiseSVN
前几天更新TortoiseSVN到1.8版本后发现FD(FlashDevelop)里不能使用svn了,在项目面板里的所有文件及文件夹都不能正确显示svn状态了,清一色都显示为未添加版本控制的状态图标, ...
- JAVA中的注解小结
以下内容参考java编程思想-4,jdk版本为jdk5.0,有点老-_-||| 什么是注解 JAVA SE5引入,也称元数据,可以直接添加到代码中,用来完整描述程序所需的信息,而这些信息是无法用Jav ...
- Linux 执行partprobe命令时遇到Unable to open /dev/sr0 read-write (Read-only file system)
在使用fdisk创建分区时,我们会使用partprobe命令可以使kernel重新读取分区信息,从而避免重启系统,但是有时候会遇到下面错误信息"Warning: Unable to open ...
- mysqldump 逻辑备份的正确姿势
在上一篇文章 MySQL 命令行工具之 mysqldump 深入研究 中,我们搞定了mysqldump的参数和基本原理.那么我们该怎么样最好的使用它的?它有哪些坑呢? 1. 利用mysqldump进行 ...
- Hello, AnnsShadow!
Hello! 发现这个神奇的园子快一年了,自己的学习历程磕磕碰碰也过了一年了,想想,这么久了,是时候做些记录做个分享者了. 从一开始的只敢看Blog,到现在自己发表一下自己的所感所想,算是一种成长了吧 ...
- 省级联动(使用ajax实现)
在博客园学习了很多实用的东西,现在该慢慢开始自己写写博客文章, 由于本人水平有限,刚走出校园的小菜鸟,另外,文章在表述和代码方面如有不妥之处,欢迎批评指正.留下你 的脚印,欢迎评论! 有什么问题,可以 ...
- RAID详解[RAID0/RAID1/RAID10/RAID5]
一.RAID定义RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘 ...
- C++ 笔记(一) —— 尽量以 const、enum、inline 替换 #define
ilocker:关注 Android 安全(新手) QQ: 2597294287 #define ASPECT_RATIO 1.653 记号 ASPECT_RATIO 不会进入 symbol tabl ...
- PHP Redis
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Myredis { //redis所 ...
- 还是不想改报告,伊阿忆啊哟-Linux基础继续
hi 虽然今天是最最美好的周六(前不着工作日后不着工作日),但老子还要来改报告,但额就是不想改,你拿我有啥办法啊... 争取完结Linux基础 一.Linux常用命令(三) 4.帮助命令 4.1 帮助 ...