• 4982阅读
  • 1回复

QUdpSocket等类进行网络传输的时候,怎么传递char*字符串以外的结构 [复制链接]

上一主题 下一主题
离线bgydragon
 

只看楼主 倒序阅读 楼主  发表于: 2009-04-30
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我把QT4.5 demo里面的broadcastsender和broadcastreceiver做了修改。但是出来的结果不对


其中sender中改成

void Sender::broadcastDatagram()
{
#pragma pack(1)
    statusLabel->setText(tr("Now broadcasting datagram %1").arg(messageNo));
    //! [1]
    //QByteArray datagram = "Broadcast message " + QByteArray::number(messageNo);
    //udpSocket->writeDatagram(datagram.data(), datagram.size(),
    //                         QHostAddress::Broadcast, 45454);
    QPoint tempPoint(messageNo, messageNo);
    udpSocket->writeDatagram((char*)(&tempPoint), sizeof(tempPoint), QHostAddress::Broadcast, 45454);
    //! [1]
    ++messageNo;
}



receiver中
void Receiver::processPendingDatagrams()
{
#pragma pack(1)
    //! [2]
    while (udpSocket->hasPendingDatagrams()) {
        QByteArray datagram;
        datagram.resize(udpSocket->pendingDatagramSize());
        udpSocket->readDatagram(datagram.data(), datagram.size());
        QPoint* tempPoint = (QPoint*)&datagram;
        //statusLabel->setText(tr("Received datagram: \"%1\"")
        //                     .arg(*temp));
        statusLabel->setText(tr("Received datagram: \"%1\"")
                             .arg(tempPoint->x()));
    }
    //! [2]
}
离线mileden

只看该作者 1楼 发表于: 2009-07-25
        QPoint* tempPoint = (QPoint*)&datagram;
改成
        QPoint* tempPoint = (QPoint*)datagram.data();
快速回复
限100 字节
 
上一个 下一个