이 질문은 여러 번 질문했지만 많은 해결책이 저에게는 해당되지 않는 것으로 보입니다. 내가 계속하기 전에 내가 당신을 위해 코드를 조금 게시 할 예정입니다 : 내가 프로그래밍의이 종류에 아주 새로운 오전 (및 선호 overflow- 스택지연과 함께 recv() 문제가 발생했습니다.
string data;
{
stringstream bodyStream;
bodyStream
<< "POST /api/translation/translate HTTP/1.1\n"
<< "Host: elfdict.com\n"
<< "Content-Type: application/x-www-form-urlencoded\n"
<< "Content-Length: " << (5 + m_word.length())
<< "\n\nterm=" << m_word;
data = bodyStream.str();
}
cout << "Sending HTTP request: " << endl << data << endl;
: 여기
// Await the response and stream it to the buffer, with a physical limit of 1024 ASCII characters
stringstream input;
char buffer[4096*2];
while (recv(sock, buffer, sizeof(buffer) - 1, MSG_WAITALL) > 0)
input << buffer;
input << '\0';
// Close the TCP connection
close(sock);
freehostent(hostInfo);
그리고 나의 요청입니다 그것을 슬그머니 내 머리를 벽에 부딪쳐 문제가 해결 될 때까지 여기에서 길을 잃어 버렸습니다!) 정말 오래 걸리는 이유를 알아내는 데 도움이됩니다. 나는 비 블로킹 (non-blocking)이되도록 설정하는 방법을 살펴 보았지만 예상대로 작동하도록하는 데 문제가 있었다. 어쩌면 여기있는 사람들이 올바른 방향으로 나를 가리킬 수도 있지만, 비 보킹 루트가 내가해야 할 길인 경우.
많은 사람들이 라이브러리 사용을 선호하지만이 방법을 배우고 싶습니다.
저는 Mac에서 프로그래밍하고 소켓으로 작업하는 것을 처음 사용합니다. 아마 처음으로 좋은 프로젝트가 아닐지도 모르지만 지금 시작했습니다! 그래서 나는 계속하고 싶다 :) 어떤 도움이 좋을 것이다!
미리 감사드립니다.
버퍼에 읽은 바이트 수를 기록하고 그 수만큼만 입력에 기록해야합니다. 데이터에 널 종결자가 포함되거나 포함되지 않을 것이라는 보장은 없습니다. – sje397
귀하의 요청에 따라 귀하는 웹 서버와 통신하고 있습니다. 여러분의 요청에 문제가있는 것은 개행입니다. HTTP 표준에 따르면' "\ r \ n"'을 개행 문자로 사용해야하며' '\ n' '을 사용하면 안됩니다. –