0
QTcpServer 및 간단한 클라이언트가 QNetworkAccessManager 인 단순한 서버가 있습니다. QNetworkAccessManager의 모든 QNetworkAccessManager 및 QTcpServer를 사용하는 경우
- 내가 말려 있거나 브라우저 모두를 통해 서버로부터 데이터를 요청하면 것은
- 괜찮습니다. 모든 요청이 재설정됩니다. QNetworkAccessManager (클라이언트)는 서버로부터 데이터를 수신 한 직후 RST (재설정 연결)를 보냈습니다. 그리고 클라이언트 코드에서 "Connection closed"(RemoteHostClosedError)
- 또한 DownloadManager 예제의 QNetworkAccessManager와 FortuneServer 예제의 QTcpServer를 다양한 조합으로 사용했지만 결과는 동일했습니다.
테스트 Qt는 버전 :
- 맥 Qt는 5.7
- 리눅스 Qt는 5.7
- 리눅스 Qt는 5.6.2
- 리눅스 Qt는 5.5.1
와이어 샤크의 스크린 샷 : qt-wireshark.png
상단부 (레드 린 포함) ES) QNetworkAccessManager의 결과이며, 성공 결과에 최신 패킷 QTcpServer
또한이 오류 재현하는 간단한 예입니다 testNetwork.zip
는 그리고 여기에 클라이언트에 대한 샘플 코드입니다 :
void test(quint16 port)
{
QNetworkAccessManager *manager = new QNetworkAccessManager();
QNetworkRequest request;
request.setUrl(QUrl(QString("http://127.0.0.1:%1/").arg(port)));
manager->connect(manager, &QNetworkAccessManager::finished,
[](QNetworkReply *reply) {
qDebug() << QString("Finished. %1. %2").arg(reply->errorString()).arg(reply->error());
qDebug() << "readed: " << reply->readAll();
});
QNetworkReply *reply = manager->get(request);
reply->connect(reply, &QNetworkReply::readyRead, [reply]() {
qDebug() << QString("readyRead: '%1'").arg(QString(reply->readAll()));
});
}
및 서버에 대한
:QTcpSocket socket;
...
if(socket.waitForReadyRead(5000))
{
QByteArray request;
request += socket.readAll();
QByteArray responce("HELLO, WORLD! HELLO, WORLD! HELLO, WORLD! HELLO, WORLD!");
socket.write(responce);
if(!socket.waitForBytesWritten())
{
qWarning() << QString("Error occurred in waitForBytesWritten() method of the tcp socket. %1 (%2)")
.arg(socket.errorString())
.arg(socket.error());
}
}
else
{
qWarning() << QString("Error occurred in read method of the tcp socket. %1 (%2)")
.arg(socket.errorString())
.arg(socket.error());
}
이 또한 내가 qt.io에 버그 리포트를 작성 (QTBUG-56631)
네, 맞습니다! 당신의 응답을 주셔서 감사합니다! – Ildar
그리고 응답을 위해 [Qt 포럼] (https://forum.qt.io)에서 raven-worx에게 감사드립니다. – Ildar
응답 : 적어도 응답은 다음과 같아야합니다. 참고 각 행 \ r에 \ n을 빈 행이 header- 및 컨텐츠 섹션 콘텐츠 길이 헤더를 분리 끝나야 콘텐츠 HTTP/1의 바이트 수이다.1 200 OK 날짜 : 2016년 (목) 그리니치 표준시 12시 28분 53초 서버 (20) OCT를 MyServer를 1.0.0 콘텐츠 길이 : 3 콘텐츠 유형 : 텍스트/일반 연결 : 휴무 XXX – Ildar