1
원격 서버에서 데이터를 수신하는 데 문제가 있습니다. http://www.google.com과 같은 호스트에 HTTP 요청을 보낼 수 있지만 회신을받을 수없는 것 같습니다. 나는 그런으로 포맷 된 HTTP 1.0 요청을 호스트를 보내고있다 :원격 서버에서 데이터 수신
GET/HTTP/1.0
호스트 : www.google.com
연결 : 여기에 가까운
가있는 부분이다 프록시 번호 :
//Parse Request Buffer
HttpRequest req;
req.ParseRequest(request.c_str(), request.length());
//Format Data to be Sent:
req.AddHeader ("Connection", "close"); // add connection close headers
req.SetVersion ("1.0"); // set http 1.0 flag
char *requestBuf = new char [req.GetTotalLength()];
req.FormatRequest(requestBuf);
//Get host IP by name
struct hostent *host;
host = gethostbyname(req.GetHost().c_str());
//Setup remote address structure
struct sockaddr_in remoteAddr;
remoteAddr.sin_family = AF_INET;
remoteAddr.sin_port = htons(req.GetPort());
remoteAddr.sin_addr = *((struct in_addr *)host->h_addr);
//create new socket for remote server
int remoteSock = socket(AF_INET, SOCK_STREAM, 0);
if(remoteSock < 0)
{
perror("Socket Error");
//return -1;
}
//connecting to remote server
if(connect(remoteSock, (struct sockaddr *)&remoteAddr, sizeof(remoteAddr)) < 0)
{
perror("Connect Error");
//return -1;
}
cout.flush() << requestBuf << endl;
//send request to remote server
if(send(remoteSock, requestBuf, sizeof(requestBuf), 0) < 0)
{
perror("Write Error");
//return -1;
}
//receive reply from server
char *recBuf = new char [1024];
int bufSize = 1024;
int readSize;
while(1)
{
readSize = read(remoteSock, recBuf, bufSize); //Read from Remote Server
cout.flush() << recBuf << endl;
if(readSize <= 0) //If the requestBuf not filled, nothing left to send to client
break;
write(clientSock, recBuf, readSize); //write reply to Client
}
close(remoteSock);
cout.flush()의 recBuf 아무것도 출력하지 않는다.
무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까? 이 코드에서
(1) 결과를 기록하기 전에 읽기 오류 ('if (readsize <= 0)')를 확인해야합니다. (2)'requestBuf'를 설정하는 코드를 보여주십시오. 특히 sizeof (requestBuf)를 사용하면 요청이 버퍼 전체를 차지하지 않기 때문에 매우 의심스러워 보입니다. (3)'recBuf'는 NUL로 종료되지 않으므로'cUt.flush() << recBuf << endl;'줄 에서처럼 recBuf를 다루지 않아야합니다. – Celada
제안 (1)이 포함되었습니다. requestBuf가 설정되는 방법에 대한 몇 가지 코드가 추가되었습니다 (requestBuf가 완전하게 설정되는 방법을 보여주기가 어렵습니다). – Shubham
recBuf를 NUL 종료로 처리하지 않으려면 \ 0? – Shubham