this post을 기반으로 QTcpServer를 작성했습니다. 소켓은 처음 4 바이트 (qint32)에 QByteArray의 Q 바이트를 삽입합니다.QTcpServer - 이상한 데이터 크기를받는 클라이언트
static inline QByteArray IntToArray(qint32 source);
QByteArray IntToArray(qint32 source) {
QByteArray temp;
QDataStream data(&temp, QIODevice::ReadWrite);
data << source;
return temp;
}
void multisocket::write_socket(const QJsonObject &obj){
QJsonDocument doc(obj);
QByteArray array(doc.toJson());
qint32 size = array.size();
qDebug() << "sending..." << size << array.size();
QByteArray total = IntToArray(size);
socket->write(total);
socket->write(array);
qDebug() << socket->waitForBytesWritten();
}
서버 출력 :이
write_socket sending... 22299 22299
write_socket true
가 클라이언트 : 클라이언트에
, 내가 루프를하고 총을 확인 모든 미세
서버를 찾습니다 크기. 전체가 도착할 때까지 수신 진행 :
이static inline qint32 ArrayToInt(QByteArray source);
void network_controller::read_all_buffer(){
QByteArray buffer;
qint32 size = 0;
while (s->bytesAvailable() > 0)
{
buffer.append(s->readAll());
while ((size == 0 && buffer.size() >= 4) ||
(size > 0 && buffer.size() >= size)){
if (size == 0 && buffer.size() >= 4)
{
size = ArrayToInt(buffer.mid(0, 4));
buffer.remove(0, 4);
}
if (size > 0 && buffer.size() >= size)
{
QByteArray data = buffer.mid(0, size);
QJsonObject obj = socket_ba_to_json(data);
emit network_callback(obj);
}
}
}
}
문제 : 클라이언트가 첫 번째 바이트의 크기를 확인 보인다. 서버와 클라이언트에서 22299가 수신되었지만 루프가 멈추지 않고 버퍼 크기가 증가합니다. 내가 뭘 놓치고있어?
클라이언트 출력 :
read_all_buffer Receiving: 22299 1460
read_all_buffer Receiving: 538976288 8760
read_all_buffer Receiving: 538976288 4380
read_all_buffer Receiving: 808192544 1460
read_all_buffer Receiving: 538976288 2920
read_all_buffer Receiving: 1381979713 3323
다른 시간. 물건이 잘못된 것처럼 보입니다. –
버퍼가 깨끗해야합니다. –
@ShiheZhang 귀하의 회신에 감사드립니다. 문제는 범위에 관한 것이 었습니다. –