내가 웹에서 특정 파일을 다운로드하는 간단한 HTTP 클라이언트를 만드는거야, 난 내가 데이터를 읽고 있어요 문제가있어, 여기 내 루프입니다 개체,이 괜찮아요, 메서드 canRead 사용할 수있는 데이터가 있는지 테스트 할 select() 사용할 수 있습니다, 나는 프로그램이 너무 빨리 때로는 canRead가 새로운 데이터 수입 및 false를 반환하기 전에 호출되는 데이터를 읽을 것 같아요, 그래서 나는 모두를 읽지 않습니다. 응답, 내가 무슨 말인지 증명하려면이 코드를 사용 :독서 HTTP 응답
AGAIN:
do{
client.readString(aux, 256);
req.append(aux);
}while((test = client.canRead()));
if(!test){
std::cout << "false\n";
std::cout << req << std::endl << std::endl;
system("pause>null");
goto AGAIN;
}
그래서 w 암탉 다시 내가 다시 갈, 읽을 수있는 더 많은 데이터가 있습니다, canRead 메서드가 잘 작동하는 것을 알고, 문제는 내가 데이터를 읽는 것을 멈출 때를 알지 못한다는 것과이 메서드의 의존은 분명히 권장되지 않는다는 것입니다. 이 문제를 해결하려면 코드에 지연 (수면)을 두거나 소켓 파일에서 직접 데이터를 처리하는 두 가지 솔루션 만 보아라.하지만 더 나은 솔루션을 찾기 위해 여기에왔다.이 작업을 수행하는 공식 방법이있다. ? 아무도 도와 주실 수 없다면, 고맙습니다.
http 헤더에서 읽어야하는 데이터의 양을 파악해야합니다. 그것이 유일한 방법입니다. – Mat
"canRead 메소드가 잘 작동하는 것을 알고 있습니다"- 그렇지 않다고 확신합니다. 귀하의 설명에서 그것의 비 차단처럼 들리지만, 귀하의 애플 리케이션 로직이 올바르지 않습니다. –
이 루프에서'선택 '을 모두 가져와야합니다. HTTP 사양을 읽습니다. 어쨌든 – davmac