UdpSoket

#pragma once

#include <QUdpSocket>
#include <QDataStream>
#include <QNetworkDatagram>
#include "Listener/LkMessageEvent.h"
#include "Listener/LkListener.h"

class LkUdpSocket : public QUdpSocket
{
	Q_OBJECT
public:
	LkUdpSocket(QObject *parent = 0);
	~LkUdpSocket();

	virtual void init(QString ip, int port);
	int write(QByteArray &data, QString ip, int port);
	int broadcast(QByteArray &data, int port);
	void setType(int type);
public slots:
	virtual void readPendingDatagrams();
protected:
	int mType;
};

#include "LkUdpSocket.h"

LkUdpSocket::LkUdpSocket(QObject *parent)
	: QUdpSocket(parent)
{
}

LkUdpSocket::~LkUdpSocket()
{
}

void LkUdpSocket::init(QString ip, int port)
{	
	bool b = bind(QHostAddress::Any, port);
	//int val = 1024;
	//setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, val);
	//connect(this, &QUdpSocket::readyRead, this, &LkUdpSocket::readPendingDatagrams);
}


void LkUdpSocket::readPendingDatagrams()
{
	while (hasPendingDatagrams())
	{
		QByteArray datagram;
		datagram.resize(pendingDatagramSize());
		QNetworkDatagram netDgm = receiveDatagram();
		QString senderIP = netDgm.senderAddress().toString();		
		datagram = netDgm.data();
		QDataStream in(datagram);
		//in.setByteOrder(QDataStream::LittleEndian);
		//in.setFloatingPointPrecision(QDataStream::SinglePrecision);

		LkMessageEvent me(QString::number(mType));
		me.setData(datagram.size() - sizeof(int), datagram.data() + sizeof(int));
		gNetListener->dispatch(me);
	}
}

int LkUdpSocket::write(QByteArray &data, QString ip, int port)
{
	int size = writeDatagram(data.data(), data.size(), QHostAddress(ip), port);	
	return size;
}

int LkUdpSocket::broadcast(QByteArray &data, int port)
{
	int size = writeDatagram(data.data(), data.size(), QHostAddress::Broadcast, port);
	return size;
}

void LkUdpSocket::setType(int type)
{
	mType = type;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值