主题 : QUDPSOCKET丢包的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 118352
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
综合积分: 4 分
注册时间: 2015-08-20
最后登录: 2015-08-30
楼主  发表于: 2015-08-21 09:28

 QUDPSOCKET丢包的问题

我用的是210的开发板:linux+qt
外围设备是一个相机,udp形式向外发送数据,开发板接收,
由于发送的是图像数据,大小为320*200;我分为50个包,每包1440字节,相机不间隔连续发送,图像频率40HZ; 发现开发板接收端发生了严重的数据丢包;
我的socket用的是
QUdpSocket dataSocket;

设置如下:
connect(&signallingSocket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(tcpError(QAbstractSocket::SocketError)));
signallingSocket.connectToHost(ip, 42000);
connect(&dataSocket, SIGNAL(readyRead()), this, SLOT(udpReadyRead()));
QHostAddress ha(myip);
const int port = 43000;

void JCamera::udpReadyRead()
{
    while(dataSocket.hasPendingDatagrams())
    {
        const qint64 len = dataSocket.pendingDatagramSize();
        //qDebug("dataLineNum = %d\n", len);
        if (sizeof(struct frame) == len) {
            dataSocket.readDatagram((char *)&frame, sizeof(struct frame));

              //处理……这里很简单地读取………………
    }
}


1、测试发现数据包丢了很多,几乎是一半,本想通过设置缓存区大小改善,发现还是没有解决问题;
int nRecvBuf=1024*1024;
int fd = dataSocket.socketDescriptor();
setsockopt(fd,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));

求大家的建议: