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; '行のように扱わないでください。 – Celada
私は提案(1)を含んだ。 requestBufの設定方法に関するいくつかのコードが追加されました(requestBufが完全にセットアップされていることを示すのは難しいです) – Shubham
recBufをNUL終了として扱わないようにするには、 \ 0それに? – Shubham