0
イメージを取得するたびに、いくつかの文字(4)が表示されます。私はこのコマンドで画像を保存したい。/client example.com/image.jpg> img.jpg 最後にrecvに間違いがあると思う。ソケットHTTPリクエストで画像データを取得できない
sprintf(request, "%s %s %s%s%s%s", "GET", path, "HTTP/1.1\r\n",
"HOST:", hostname, "\r\n\r\n");
//Send some data with TCP
if(send(sockfd, request, strlen(request), 0) < 0) {
printf("Send failed\n");
exit(1);
}
// printf("Request sended\n");
if(recv(sockfd, server_reply , sizeof(server_reply), 0) < 0) {//receive answer
printf("recv failed\n");
}
char *data = strstr(server_reply, "\r\n\r\n");//save data after header
data+=4;
//printf("Server reply: \n");//print the answer
puts(data);
close(sockfd);
return 0;
}
私はすべてのイメージバイナリデータを受け取ることができないと思いますが、すべてを正しく取得する方法はわかりません。
多くのことが間違っている可能性がありますが、 'recv'呼び出しが期待どおりのデータを返さない場合は、すべてのデータを取得するまでループ内で実行する必要があります。さらに、 'recv'が '\ 0'終了文字列を返すとは思わないでください。特にイメージはバイナリデータなので、 'puts'はどのような場合でもそれを印刷しようとすると悪い方法です。 – jxh
関連:https://stackoverflow.com/questions/32856200/receive-recv-data-until-end-of-stream-using-http – jxh
@jxhは正しい...彼が正しく参照しているリンクは、応答ヘッダーは、応答のコンテンツ本体を読み取る方法を教えます。さらに、 "画像"を受け取った場合、 "puts()"はバイナリデータではなく "文字列"を出力するため、 "puts()"を使用して出力することはできません。 – TonyB