boost-asio를 사용하여 간단한 코드를 준비했습니다.
asio::io_service io_service;
asio::ip::tcp::socket s(io_service);
asio::ip::tcp::resolver resolver(io_service);
asio::connect(s, resolver.resolve({ "aire.pl", "80" }));
cout << "connected" << endl;
string request = "GET http://aire.pl/ HTTP/1.1";
size_t request_length = std::strlen(request.c_str());
asio::write(s, asio::buffer(request, request_length));
cout << "packet sent" << endl;
char reply[1024];
size_t reply_length = asio::read(s, asio::buffer(reply, request_length));
std::cout << "Reply is: ";
std::cout.write(reply, reply_length);
std::cout << "\n";
tcp-dump를 사용하면 프로그램이 보낸 패킷을 볼 수 있기 때문에 모든 것이 잘 작동하는 것 같습니다.
하지만 아무런 반응이 없습니다. 한 가지 흥미로운 사실은 HTTP 서버가 nginx이면 정상적으로 작동한다는 것입니다! 이 예에서 HTTP 서버는 Apache2입니다. 뭐가 문제 야?
완전한 HTTP 요청을 보내지 않은 것 같습니다. GET 행 다음에는 선택적 헤더가 이어지고 헤더의 끝을 나타내는 빈 행이 이어집니다. 헤더를 보내지 않더라도 서버가 전체 요청을 받았음을 알 수 있도록 빈 줄을 보내야합니다.
문자열 \r\n\r\n
끝에 추가하십시오 request
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다