linux 防火墙 qt udp,使用Qt实现简单的udp/ip通信
使用UDP其实不用区分服务器端和客户端,直接用同一程序就能建立连接,下面直接贴出代码
1、头文件#ifndef SERVERWIDGET_H
#define SERVERWIDGET_H
#include
#include //UDP套接字
namespace Ui {
class ServerWidget;
}
class ServerWidget : public QWidget
{
Q_OBJECT
public:
explicit ServerWidget(QWidget *parent = 0);
~ServerWidget();
void dealMsg(); // 处理对方发过来的数据
private slots:
void on_buttonSend_clicked();
void on_buttonClose_clicked();
private:
Ui::ServerWidget *ui;
QUdpSocket *udpSocket;
};
#endif // SERVERWIDGET_H
2、cpp文件#include "serverwidget.h"
#include "ui_serverwidget.h"
#include
ServerWidget::ServerWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::ServerWidget)
{
ui->setupUi(this);
setWindowTitle("服务器:8899");
udpSocket = NULL;
//分配空间,指定父对象
udpSocket = new QUdpSocket(this);
//绑定
udpSocket->bind(8899);
//当对方成功发送数据过来
//自动触发readyRead
connect(udpSocket, &QUdpSocket::readyRead, this, &ServerWidget::dealMsg);
}
ServerWidget::~ServerWidget()
{
delete ui;
}
//处理对方发过来的数据
void ServerWidget::dealMsg()
{
//先读取对方发送的内容
char buf[1024] = {0};
//定义一个对象获取对方信息
QHostAddress cliAddr;
quint16 port; //对方端口
qint64 len = udpSocket->readDatagram(buf,sizeof(buf), &cliAddr, &port);
if(len > 0){
//字符串格式化
QString str = QString("[%1:%2] %3").arg(cliAddr.toString()).arg(port).arg(buf);
//给编辑区设定内容
ui->textEditRead->setText(str);
}
}
//发送数据
void ServerWidget::on_buttonSend_clicked()
{
if(udpSocket == NULL){
return;
}
//先获取对方的IP和端口
QString ip = ui->lineEditIp->text();
qint16 port = ui->lineEditPort->text().toInt();
//获取编辑区内容
QString contentStr = ui->textEditRead->toPlainText();
//给指定的IP发送数据
udpSocket->writeDatagram(contentStr.toUtf8(), QHostAddress(ip), port);
}
//关闭连接
void ServerWidget::on_buttonClose_clicked()
{
if(udpSocket == NULL){
return;
}
udpSocket->disconnectFromHost();
udpSocket->close();
}
3、最终实现的效果如下图
--THE END--
linux 防火墙 qt udp,使用Qt实现简单的udp/ip通信相关推荐
- qt中socket通信流程图_使用QT实现简单的tcp/ip通信
使用QT实现tcp/ip的通信非常的简单,下面我将直接贴出代码: 一.服务器端 1.头文件#ifndef SERVERWIDGET_H #define SERVERWIDGET_H #include ...
- Qt 使用Visa库与数字仪器仪表TCP/IP通信(SCPI指令自动化测试)
标准数字仪器仪表可通过 GPIB, RS232, USB, LAN接口等与上位机数据通信和控制.如示波器.数字万用表.频率计.台式电源等.通过SCPI协议(字符串形式)与设备通信,串口,USB等接口可 ...
- udp模拟tcp java_Java简单实现UDP和TCP
TCP实现 TCP协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降低. 简单的TCP实现 //服务端 pu ...
- linux防火墙过滤规则
一.linux防火墙基础 防火墙分为硬件防火墙和软件防火墙. 1.概述 linux 防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙. 包过滤机制:netfil ...
- linux下 卸载qt_Windows 下 Qt creator安装和使用
作者 | 思凡 常用C++开发环境介绍 命令行CommandLine (1)Linux命令行:GNU g++ + Makefile/CMake (2)Windows命令行:MinGW 市面 ...
- Qt界面编程(一)—— Qt概述、Qt的安装和环境变量的配置、Qt程序简单说明
1. Qt概述 1.1 什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立图形界面所需的所有功能.它是完全面向对象的,很容易扩展,并且允许真正的组件编程. 1.2 ...
- 在 Ubuntu Linux 上从源代码构建 Qt 6.2.2的简短教程
Qt 6.2.0 是 Qt 6 系列的第3个版本,功能与 Qt 5 相当,因此有望成为第一个被新 Qt 项目或从 Qt 5 移植的项目广泛采用的版本.在这篇文章中我提供有关在 Ubuntu Linux ...
- QT 信号与槽 最简单例子
QT 信号与槽 最简单例子 main.cpp 和 my_head.h源码: [cpp] view plaincopy #ifndef MY_HEAD_H #define MY_HEAD_H #inc ...
- Qt 互斥锁 QMutex 的简单应用
Qt 互斥锁 QMutex 的简单应用 在多线程解决问题中,经常会碰到多个线程操作同一片资源,有些时候用信号量的方式去处理,但有的时候需要用到互斥锁. 互斥锁:说白了就是,资源某个时间只能被一个线程使 ...
- linux 64位 安装qt creator .run,Qt Creator安装
Qt Creator安装 Linux IDE Tools Download QT 找到需要的包下载. Qt Creator PS: Qt Creator 3.4.2版本之后的版本需要注册信息. Ubu ...
最新文章
- 决策树算法详解(1)
- configure - 配置源代码树
- 日常生活 -- UNIX再学习告一段落
- oracle查询并更新数据库,oracle数据库查询和更新
- win10录屏工具_win10怎么录屏?这才是最长情陪伴你的录屏工具
- Dynamics CRM 依赖组件类型为应用程序功能区导致的无法删除实体问题的解决方法...
- 你所不知的 CSS ::before 和 ::after 伪元素用法
- ftp加速传输java_Java FTPClient 大量数据传输的问题(未解决)
- ELK之LogStacs
- 中国城市供水统计年鉴
- 员工管理能力怎么提高?不妨使用现代工时表软件
- 计算机内部总线和外部总线,总线分为内部总线和外部总线
- 工作总结,关于浏览器不兼容的问题。
- Coinbase、BlockFi相继开启上市准备工作,但SEC准备好了吗?
- 物联网商机发展空间无限、远大于互联网,物联网创业和项目也有坑——物联网避坑指南之1
- 开机无法跳过谷歌验证_如何跳过Nexus7第一次开机设置的网络验证
- java求100以内的素数
- 使用Matlab的appdesigner创建一个简单的图像处理app
- w ndows7怎么安装,《联想Y460在Wndows7系统下完美安装XP系统的方法.doc
- maven仓库中查找依赖的步骤
热门文章
- 解决磁盘IO紧张的一种方法
- android for opencv (2) byte[] ,Bitmap 与 Mat 类型转换,Bitmap保存照片
- 172篇文献:NUS颜水成等发布首篇《深度长尾学习》综述
- 重磅!泰晤士发布重量级学科排名,90所中国大陆高校上榜!
- 最新!CVPR2020 最新论文下载!
- JavaSE--RMI初识
- ASP.NET MVC扩展自定义视图引擎支持多模板动态换肤skins机制
- MySQL常用系统表
- maya绝招(1-20)
- 20130331java语言基础学习笔记-语句_breakcontinue