我用的是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));
求大家的建议: