UDP通信是无连接的,不可靠但是传输效率高, UDP就像是写信,知道地址即可,TCP就像是打电话,确保目标正确。 在UDP服务器端,通信套接字直接绑定,如果对方发数据,套接字自动触发readyRead(),发是通过槽函数实现。 在UDP客户端,通信套接字直接绑定,如果对方发数据,套接字自动触发readyRead(),发是通过槽函数实现。 实际上,UDP并不着重区分客户端与服务器端,两者都是只需要一个通信套接字,并不需要监听,当通信套接字的readyRead信号有效之后自动读取。

//QTUDP
void Demo::sendLocalFile()
{
    QEventLoop eventloop;
    QTimer::singleShot(500,&eventloop,SLOT(quit()));
    eventloop.exec();
    
    QDir dir("./screen");
    if(dir.exists())
    {
        QString path=dir.absolutePath();
        dir.setFilter(QDir::Files|QDir::NoSymLinks);
        QFileInfoList _qslist=dir.entryInfoList();
        uint timestamp=0;
        QFileInfo _localFile;
        for each(QFileInfo fileInfo in _qslist)
        {
            uint _time=fileInfo.lastModified().toTime_t();
            if(timestamp<_time)
            {
                timestamp=_time;
                _localFile = fileInfo;
            }
        }
        Deploy _deploy;
        _deploy.Code = 12;
        _deploy.Length=path.size()+sizeof("/")+_localFile.fileName().size();
        memset(_deploy.Name,0,sizeof(_deploy.Name));
        QByteArray _qByte;
        _qByte.append((char*)&_deploy, sizeof(_deploy));
        _qByte.append(path);
        _qByte.append("/");
        _qByte.append(_localFile.fileName());

        QHostAddress _add("127.0.0.1");
        quint16 _port =80;
        mSocket->writeDatagram(_qByte,_qByte.size(),_add,_port);

        QString _local(path+"/"+_localFile.fileName());
        QString _remote("/test/"+_localFile.fileName());
        _ftp.uploadDataByFtp(_local,_remote);
    }
}