• 9166阅读
  • 8回复

UDP多线程网络编程 [复制链接]

上一主题 下一主题
离线it_mac
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-14
大家好!本人写了一个UDP测试程序,基于线程的。
在PC上运行没有问题,但是交叉编译下载到友善的micro2440运行,发现它能正常向PC发送报文,但是不能正常接收PC发给它的报文。
本人也对比了网上一些例子的接收报文的那部分代码,发现没有区别,唯一的区别的就是我写的程序是把接收报文这部分放在一个线程里面。
两天了都找不出原因,还请大家指教。


附上完整的工程和关键部分的代码。
udp-test.7z udp-test.7z (5 K) 下载次数:145 udp-test.7z


下面是关键部分的代码:

void ListenThread::run()
{
    udpSocket = new QUdpSocket();
    connect(udpSocket, SIGNAL(readyRead()), this, SLOT(dataReceived()));


    bool result = udpSocket->bind(portStr.toInt());
    if(!result)
    {
        cout << "udp socket create error!" << endl;
        return;
    }
    exec();
}


void ListenThread::dataReceived()
{
    while (udpSocket->hasPendingDatagrams())
    {
        QByteArray datagram;
        datagram.resize(udpSocket->pendingDatagramSize());


        udpSocket->readDatagram(datagram.data(), datagram.size());


        QString msg = datagram.data();
        emit showMessage(msg);
    }
}



离线it_mac
只看该作者 1楼 发表于: 2011-07-14
自己顶!
离线it_mac
只看该作者 2楼 发表于: 2011-07-15
自己再顶!
离线tanius

只看该作者 3楼 发表于: 2011-07-28
先顶顶,下了代码看看再说
离线brood_jin

只看该作者 4楼 发表于: 2011-07-28
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(dataReceived()));
改成
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(dataReceived()),Qt::DirectConnection);
最后的参数不一定准确,就是让信号槽直接连接。
离线it_mac
只看该作者 5楼 发表于: 2011-07-29
引用第4楼brood_jin于2011-07-28 10:40发表的  :
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(dataReceived()));
改成
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(dataReceived()),Qt::DirectConnection);
最后的参数不一定准确,就是让信号槽直接连接。

试了,还是不行~
离线it_mac
只看该作者 6楼 发表于: 2011-07-29
引用第5楼it_mac于2011-07-29 09:19发表的  :
试了,还是不行~


现在可以了,确实是这个问题~

离线it_mac
只看该作者 7楼 发表于: 2011-07-29
回 4楼(brood_jin) 的帖子
谢谢 brood_jin,现在可以了!
离线haoyou0707
只看该作者 8楼 发表于: 2011-10-22
问一下在制作类似QQ的聊天工具中!是UDP还是TCP  还是二者兼用!!!
快速回复
限100 字节
 
上一个 下一个