2016-07-14 2 views
1

Qt에 프로그램을 작성하여 임베디드 장치에 HTTP 요청을하고 QNetworkAccessManager를 사용하여 다음과 같은 경우를 제외하고는 잘 작동합니다.QNetworkAccessManager, 재설정 TCP 연결

임베디드 장치는 1 개의 TCP 연결 만 허용합니다. TCP 연결이 활성화되어있는 동안 연결이 끊어지면 (케이블을 당긴 경우) 장치는 매달린 상태가됩니다. 연결이 끊어 졌거나 더 이상 받아 들일 수 없다는 것을 모릅니다.

QNetworkAccessManager를 수동으로 재설정하여 모든 요청에 ​​대해 새 연결을 강제로 수행하고 요청이 완료되면 정상적으로 연결을 닫을 수 있습니까?

답변

1

답장에서 QNetworkRequest::HttpPipeliningWasUsedAttribute 속성이 설정되어 있는지 확인하십시오. 그렇다면이 문제가 발생합니다 : QNetworkRequest::HttpPipeliningAllowedAttribute에 잘못된 값을 강제 적용하라는 요청을 수정해야합니다. 파이프 라이닝이 없으면 각 요청은 별도의 연결로 보내집니다.

QNetworkAccessManager은 여러 요청을 동시에 시작할 수 있습니다. 하나의 요청 만 처리하도록 허용하고 이전 요청이 완료되면 새로운 요청을 하나만 배치해야합니다.

+0

파이프 라이닝은 기본적으로 비활성화됩니다. 파이프 라이닝을 사용할 수없는 경우 요청이 완료되면 TCP 연결이 닫힙니다. – jossgray

+0

내가 발견 한 해결 방법은 모든 응답 후에 QNetworkAccessManager를 다시 만드는 것입니다. 그러나 이것은 약간 부 끄 러운 것 같다. – jossgray