В основном я пытаюсь захватить HTTP-запрос GET браузера через сокет и отправить этот запрос в Интернет, затем перехватить ответ и отправить его обратно в браузер.Когда перевод состоит только из текста, все работает отлично.Но при загрузке изображения.Браузер выдает ошибку «Невозможно отобразить изображение, потому что оно содержит ошибки».любая помощь будет принята с благодарностью.
#include "cc352.h"
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char **argv)
{
int listenfd, connfd,weblin,webcon,webwrite,n,x,y,w,w1;
socklen_t len,wlen;
struct sockaddr_in servaddr, cliaddr , webservad , webcliad;
unsigned char buff[3072] , buff2[3072] ,ext[5] ,wbuff[100000];
time_t ticks;
int yes = 1;
const char *ptr;
if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
fprintf(stderr, "socket creation failed\n");
exit (1);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
if (inet_pton(AF_INET,"127.0.0.1", &servaddr.sin_addr) <= 0){
printf("inet_pton error for %s", argv[1]);
return 1;
}
servaddr.sin_port = htons(4619);
if ( (bind(listenfd, (SA *) &servaddr, sizeof(servaddr))) < 0) {
fprintf(stderr, "bind failed\n");
exit (1);
fprintf(stdout, "bindd completed\n");
}
if ( (weblin = socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
fprintf(stderr, "socket creation failed\n");
exit (1);
}
printf("weblin socket created \n");
bzero(&webservad, sizeof(webservad));
webservad.sin_family = AF_INET;
webservad.sin_port = htons(80);
if (inet_pton(AF_INET,"208.80.152.211", &webservad.sin_addr) <= 0){
printf("inet_pton error for %s", argv[1]);
return 1;
}
if (connect(weblin, (SA *) &webservad, sizeof(webservad)) < 0) {
printf("weblin connect error");
return 1;
}
printf("weblin connected \n");
if ( listen(listenfd, LISTENQ) < 0) {
fprintf(stderr, "listen failed\n");
exit (1);
fprintf(stderr, "listning\n");
}
len = sizeof(cliaddr);
if ( (connfd = accept(listenfd, (SA *) &cliaddr, &len)) < 0 ) {
fprintf(stderr, "accept failed\n");
exit (1);
}
fprintf(stdout, "Connection accepted\n");
int d=0;
read(connfd,&buff, 3071); // Reads GET request from browser save it to array buff
unsigned char bron[strlen(buff)];
for(d=0 ; d<=sizeof(bron) ; d++){
bron[d]=buff[d];
}
write(weblin,bron, sizeof(bron)); // Send the data to Internet
printf("%s \n",bron);
while(d=read(weblin,&wbuff, 100000)>0){ //Reads the reply from Internet and save it to wbuff
unsigned char wron[strlen(wbuff)];
for(d=0 ; d<=sizeof(wron) ; d++ ){
wron[d]=wbuff[d];
}
write(connfd,wbuff,strlen(wbuff)); //Writes the reply to the browser
printf("%s \n",wron);
}
close(connfd);
close(listenfd);
close(weblin);
}