QT下的UDP通讯

来源:互联网 发布:武功知乎 编辑:程序博客网 时间:2024/06/02 04:35
udp.h#include "qobject.h"#include "qudpsocket.h"class UDP: public QObject{    Q_OBJECTpublic:    UDP();    ~UDP();private slots:    void readyReadSlot();    void errorSlot(QAbstractSocket::SocketError socketError);private:    int SendData(const char *pData, int iLength);private:    QUdpSocket *_udpSocket;    QHostAddress _remoteHostAddress;    int _localPort;    int _remotePort;};


udp.cppUDP::UDP(){    _remoteHostAddress = "127.0.0.1";    _remotePort = 2278;    _localPort = 2279;    _udpSocket = new QUdpSocket(this);    connect(_udpSocket, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));    connect(_udpSocket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(errorSlot(QAbstractSocket::SocketError)));    _udpSocket->bind(_localPort);}UDP::~UDP(){    _udpSocket->close(); //need先判断指针是否非空}void UDP::readyReadSlot(){    while( _udpSocket->hasPendingDatagrams() )    {        QByteArray datagram;        QHostAddress hostAddress;        quint16 iPort;        datagram.resize( _udpSocket->pendingDatagramSize() );        //Udp Received Data From Remote Host        _udpSocket->readDatagram( datagram.data(), datagram.size(), &hostAddress, &iPort );        //拼装接收到的数据        //...    }}void UDP::errorSlot(QAbstractSocket::SocketError socketError){    if( socketError == QAbstractSocket::RemoteHostClosedError ) return;    QAbstractSocket::SocketState eSocketState = _udpSocket->state();    if( eSocketState == QUdpSocket::BoundState )    {        _udpSocket->close();    }    //Occur Error: _udpSocket->errorString()}int UDP::SendData(const char *pData, int iLength){    int iSend = _udpSocket->writeDatagram(pData, iLength, _remoteHostAddress, _remotePort);    return iSend;}



QT += core network        in pro file

0 0