QUdpSocket

在项目的pro文件中添加:

QT       += core gui network

IP端口介绍:任何一个电脑,都可以同时有很多个不同网段的IP地址和端口号;

#include<QHostInfo>

#include<QNetworkInterface>

#include<QUdpSocket>

#include<QByteArray>

int port=5556; 定义端口号

发送端:

QUdpSocket* udpSend=new QUdpSocket;//套接字句柄

//bing绑定IP和端口号,表示指定通过本机的某个IP和端口号发数据(IP本机必须有),如果只是发送数据,没要求指定从本机的那个IP端口发送数据的话,可以不需要bind

udpSend->bind(QHostAddress("192.168.0.34"),port);//本机的IP地址和端口号

//将数据发送出去,参数:数据内容,数据长度,host对方(接收方)IP地址和 port端口

//在Qt中有三种发送数据的方式: 
1) qint64 writeDatagram(const QNetworkDatagram &datagram);//QNetworkDatagram 中包含了要发送的数据和IP端口等信息
2)qint64 writeDatagram(const char *data, qint64 len, const QHostAddress &host, quint16 port);   
3) qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)       
{ return writeDatagram(datagram.constData(), datagram.size(), host, port); }

接收端

udpReceive=new QUdpSocket;

//绑定IP端口,指定从本机的那个IP端口里接受数据(接收端必须bind)

udpReceive->bind(QHostAddress("192.168.0.231"),port);

//连接信号槽,每次有数据报过来,就会触发槽函数

connect(udpReceive,SIGNAL(readyRead()),this,SLOT(dataReceived()));

void Form::dataReceived()

{

udpReceive->hasPendingDatagrams()//判断是否有数据报可读

udpReceive->pendingDatagramSize()//返回收到数据的长度

//接收数据

//用readDatagram函数接收,可以通过参数获取到对方的IP,端口等信息
qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *host = nullptr, quint16 *port = nullptr);

}

报文大小不超过64KB

传输结构体数据

#pragma pack(1)字节对齐

#pragma pack()

处理结构体类型数据

INFO_SCAN info;//接受的数据赋值给结构体

memset(&info,0,sizeof(info));

m_Socket->readDatagram((char*)&info,sizeof(info));

  INFO_SCAN info;//将一个结构体的数据发送出去

 info.orderType=TELESOFTWARE_CLOSE;

memset(&info.softwareName,0,sizeof(info.softwareName));

 QString str=ui->software_name->text();

 strcpy(info.softwareName,str.toLatin1());

 int n=m_Socket->writeDatagram((char*)&info,sizeof(info),QHostAddress(ui->broadcast_address->text()),PORT);

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值