• 6803阅读
  • 4回复

UDP传图片 老出问题! [复制链接]

上一主题 下一主题
离线kc517428199
 
只看楼主 倒序阅读 楼主  发表于: 2010-11-13
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
本机可以收得到。
其他机就不行!! 下面代码(传图功能):


void MainWindow:penImage()
{
    image = QFileDialog::getOpenFileName(this, tr("Open Image File..."),
                    "./image/", tr("Image-Files (*.png *.gif *.bmp *.jpeg *.jpg)"));
    QFile::copy(image, QString("image/") + QFileInfo(image).fileName());
    if (image.isEmpty())
    {
        return;
    }
    writeData(4);
    ui->txtInput->append("<img src='image/" + QFileInfo(image).fileName() + "'  />");


}


void MainWindow::writeData(int flag)
{
    QByteArray datagram;
    QDataStream out(&datagram ,QIODevice::WriteOnly);
    QString address = getIP();


    out << address << QHostInfo::localHostName() << flag;


    //广播图片
    if(flag == 4)
    {
        out << QFileInfo(image).fileName();


        QImageReader imageReader(image);
        imageReader.setFormat(QFileInfo(image).suffix().toAscii());
        out <<  imageReader.read();
    }


    udpSocket->writeDatagram(datagram.data(),qint64(datagram.size()),
                             QHostAddress::Broadcast,quint16(defaultPort));
}


void MainWindow::receiveMessage()
{
    while(udpSocket->hasPendingDatagrams())
    {
        QByteArray datagram;
        datagram.resize(udpSocket->pendingDatagramSize());
        udpSocket->readDatagram(datagram.data(), qint64(datagram.size()));  


        QDataStream in(&datagram,QIODevice::ReadOnly);


        in >> receiveHostIP >> receiveHostName >> receiveFlag;


        bool bb = ui->tableWidget->findItems(receiveHostIP,Qt::MatchExactly).isEmpty();


        if(receiveFlag == 4)
        {
                QString tempFileName;
                in >> tempFileName;
                tempFileName = QString(("image/") + tempFileName);


                QImage image;
                in >> image;


                QImageWriter imageWrite(tempFileName);
                imageWrite.setFormat(QFileInfo(tempFileName).suffix().toAscii());
                imageWrite.write(image);


                ui->txtBrowser->append("<img src='image/" + tempFileName + "'  />");


                continue;
        }
离线kc517428199
只看该作者 1楼 发表于: 2010-11-14
难道没人懂吗!!!!
离线woshiisp
只看该作者 2楼 发表于: 2011-02-21
急需类似问题的答案啊 ~~~~~~~~~~ 郁闷
QT~想要爱你不容易啊!不容易 也要 爱 哈哈哈
离线hehui

只看该作者 3楼 发表于: 2011-04-09
图片有多大?
太大的可能丢包~
离线jlwang1985

只看该作者 4楼 发表于: 2011-05-03
你把“udpSocket->writeDatagram(datagram.data(),qint64(datagram.size()),
                             QHostAddress::Broadcast,quint16(defaultPort));”中的Broadca修改成你需要发送到得主机的IP地址试试,因为,在广播时,经过交换机时,交换机会屏蔽广播信号;
快速回复
限100 字节
 
上一个 下一个