QT QTcpSocket在开始向服务器写入数据后丢失了一些数据
我通过TCP从服务器获取正弦波并绘制它。一切似乎都很好,直到我开始在c>1000时发回一些东西。发送一个字节后,我仍然得到数据,但正弦波的波形发生了变化。我确信有一些丢失的数据,但我在代码中找不到bug。传输速率约为1Mbps 问题是QT QTcpSocket在开始向服务器写入数据后丢失了一些数据,qt,sockets,tcp,qtcpsocket,Qt,Sockets,Tcp,Qtcpsocket,我通过TCP从服务器获取正弦波并绘制它。一切似乎都很好,直到我开始在c>1000时发回一些东西。发送一个字节后,我仍然得到数据,但正弦波的波形发生了变化。我确信有一些丢失的数据,但我在代码中找不到bug。传输速率约为1Mbps 问题是 当我向服务器写入内容时,它对套接字有何影响 为什么套接字会丢失一些数据 我怎样才能修好它 ssTcpClient::ssTcpClient(QObject *parent) : QObject(parent) { socket = new QTcpSock
ssTcpClient::ssTcpClient(QObject *parent) :
QObject(parent)
{
socket = new QTcpSocket(this);
connect(socket, SIGNAL(connected()),
this, SLOT(on_connected()));
connect(socket, SIGNAL(disconnected()),
this, SLOT(on_disconnected()));
}
void ssTcpClient::on_connected()
{
qDebug() << "Client: Connection established.";
connect(socket, SIGNAL(readyRead()),
this, SLOT(on_readyRead()));
in = new QDataStream(socket);
}
void ssTcpClient::on_readyRead(){
static quint32 c = 0;
qDebug() << "c" << c++;
QVector<quint8> data;
quint8 buf;
while(socket->bytesAvailable()>0){
//read data to buffer
*in >> buf;
data.append(buf);
}
//process data
emit data_read(data);
//if there are over 1000 data then send something back
if(c>1000){
char msg[10];
msg[0] = 'c';
socket->write(msg,1);
socket->flush();
}
}
ssTcpClient::ssTcpClient(QObject*parent):
QObject(父对象)
{
插座=新QTC插座(本);
连接(插座,信号(已连接()),
此插槽(在_connected()上);
连接(插座、信号(已断开)(),
这个插槽(在_disconnected()上);
}
void ssTcpClient::on_connected()
{
qDebug()>buf;
数据追加(buf);
}
//过程数据
发射数据并读取(数据);
//如果有超过1000个数据,那么发送一些回来
如果(c>1000){
char-msg[10];
msg[0]=“c”;
套接字->写入(消息,1);
插座->冲洗();
}
}
您不能依赖TCP通信来完成,数据以不确定的块到达 您正在使用
QDataStream
从套接字读取数据。这是一个非常糟糕的主意,因为QDataStream
假设您拥有完整的数据集。如果没有足够的数据,它将自动失败
我建议您修改您的数据源,使其要么发送字节计数作为第一件事,要么发送某种终止序列,您可以寻找它来告诉您已收到足够的数据进行处理。您不能依赖TCP通信来完成,数据以不确定的块到达 您正在使用
QDataStream
从套接字读取数据。这是一个非常糟糕的主意,因为QDataStream
假设您拥有完整的数据集。如果没有足够的数据,它将自动失败
我建议您修改您的数据源,使其要么发送字节计数作为第一件事,要么发送某种终止序列,您可以寻找它来告诉您已收到足够的数据进行处理。您不能依赖TCP通信来完成,数据以不确定的块到达 您正在使用
QDataStream
从套接字读取数据。这是一个非常糟糕的主意,因为QDataStream
假设您拥有完整的数据集。如果没有足够的数据,它将自动失败
我建议您修改您的数据源,使其要么发送字节计数作为第一件事,要么发送某种终止序列,您可以寻找它来告诉您已收到足够的数据进行处理。您不能依赖TCP通信来完成,数据以不确定的块到达 您正在使用
QDataStream
从套接字读取数据。这是一个非常糟糕的主意,因为QDataStream
假设您拥有完整的数据集。如果没有足够的数据,它将自动失败
我建议您修改您的数据源,以便它要么发送字节计数作为第一件事,要么发送某种终止序列,您可以寻找它来告诉您,您已经收到足够的数据进行处理