Я на последнем серьезном препятствии в написании базового прокси-сервера на C.
Мой сервер успешно получает запросы от браузера, а затем успешно отправляет их на хост, где бы они ни находились. И я успешно получаю ответы от хозяина! Кроме того, вот что я получаю, когда пытаюсь подключиться к Google через сервер:
Rcvd message from server:
----
HTTP/1.1 200 OK
Date: Thu, 15 Mar 2012 20:35:11 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=83a7c2e6675a9a9f:FF=0:TM=1331843711:LM=1331843711:S=7I7RIVV1B-HxhWJR; expires=Sat, 15-Mar-2014 20:35:11 GMT; path=/; domain=.google.com
Set-Cookie: NID=57=KvqnXtYNkJZBryXL5zzhG5eH8Or2_PDWDqT_kU35PvOro_mAFiLiTSjPHOnWWxxm3R0vKYnzEeVkAPFKK366lZiNZGpjhO2-II5OeZQnWe09H-jZdePsrN-SnBdQ2ENT; expires=Fri, 14-Sep-2012 20:35:11 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
1000
<!doctype html><html itemscope itemtype="http://schema.org/WebPage"><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta name="description" content="Search the world's information, including webpages, images, videos and more. Goo
Вы видите, как это отсекается? Из-за «Transfer-Encoding: chunked». Теперь, как мне заставить сервер продолжать посылать мне остальные куски? Потому что после этого первого он останавливается. Нужно ли поместить read () в цикл while и сказать, чтобы продолжить чтение и пересылку клиенту, пока есть что прочитать?
EDIT:
Хорошо, вот мой настоящий код. Это делает одно начальное чтение ответа сервера (в сокете с именем «sock»), записывает его клиенту («newsock»), затем вводит цикл while для продолжения чтения дополнительных ответов сервера и отправки их клиенту. я еще не проверял эту форму кода. Вы видите какие-либо вопиющие проблемы, кроме пробелов в проверке ошибок?
/*WRITING SERVER RESPONSE TO CLIENT*/
char buffer2[1024];
n = read(sock, buffer2, 1024 );
if ( n < 1 )
{
perror( "read() failed" );
return EXIT_FAILURE;
}
else
{
buffer2[n] = '\0';
printf( "Rcvd message from server: \n\n----\n\n%s\n\n----\n\n", buffer2 );
}
n = write( newsock, buffer2, strlen( buffer2 ) );
while((n = read(sock, buffer2, 1024 )) >= 1)
{
buffer2[n] = '\0';
printf( "Rcvd message from server: \n\n----\n\n%s\n\n----\n\n", buffer2 );
n = write( newsock, buffer2, strlen( buffer2 ) );
}