URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3174
[ Назад ]

Исходное сообщение
"http запрос на с"

Отправлено korn , 15-Июл-04 21:45 
Есть прога ,которая посылает http запрос серваку и должна получить index.html.
у меня получается послать запрос,сервак его обрабатывает но мне не удается принять файл!!!
вот кусок кода:
char *buf="GET /index.html HTTP/1.0";
..
connect(sock,(struct sockaddr*)&cli,sizeof(cli));
..
int k=send(sock,buf,sizeof(buf),0);

printf("%d bytes send\n",k);

recv(sock,recved,sizeof(recved),0);
printf("%s",recved);
close(sock);
Ну вот после этого прога не может файл получить и виснет.
А если я намеренно посылаю неправильный запрос то сервак мне посылает 400 Bad request и это у меня отображается на зкране!!!!


Содержание

Сообщения в этом обсуждении
"http запрос на с"
Отправлено klalafuda , 15-Июл-04 22:02 
>Есть прога ,которая посылает http запрос серваку и должна получить index.html.
>у меня получается послать запрос,сервак его обрабатывает но мне не удается принять
>файл!!!
>вот кусок кода:
>char *buf="GET /index.html HTTP/1.0";
>..
>connect(sock,(struct sockaddr*)&cli,sizeof(cli));
>..
>int k=send(sock,buf,sizeof(buf),0);

читайте книги по C для начинающих
hint: sizeof(buf) в вашем случае совершенно неуместен и программа уже некорректно работает. дальше уже дело случая.

>printf("%d bytes send\n",k);
>
>recv(sock,recved,sizeof(recved),0);
>printf("%s",recved);
>close(sock);

что из себя представляет recved ? хотя я могу догадаться.. char *, да ?

// wbr


"http запрос на с"
Отправлено korn , 15-Июл-04 22:54 
>>Есть прога ,которая посылает http запрос серваку и должна получить index.html.
>>у меня получается послать запрос,сервак его обрабатывает но мне не удается принять
>>файл!!!
>>вот кусок кода:
>>char *buf="GET /index.html HTTP/1.0";
>>..
>>connect(sock,(struct sockaddr*)&cli,sizeof(cli));
>>..
>>int k=send(sock,buf,sizeof(buf),0);
>
>читайте книги по C для начинающих
>hint: sizeof(buf) в вашем случае совершенно неуместен и программа уже некорректно работает.
>дальше уже дело случая.
>
>>printf("%d bytes send\n",k);
>>
>>recv(sock,recved,sizeof(recved),0);
>>printf("%s",recved);
>>close(sock);
>
>что из себя представляет recved ? хотя я могу догадаться.. char *,
>да ?
>
>// wbr

Нет recved - это char[64]
Скажите а почему sizeof(buf) неуместно?Я спросил насчет этого у других людей,мне сказали что нормально это....


"http запрос на с"
Отправлено jd , 16-Июл-04 03:42 
>>>char *buf="GET /index.html HTTP/1.0";

>Скажите а почему sizeof(buf) неуместно?Я спросил насчет этого у других людей,мне сказали
>что нормально это....

Потому, что в данном случае sizeof(buf)=размеру указателя, например на 32-х битной платформе (с которой вы вероятно имеете дело) это будет 4. Можно воспользоваться вызовом strlen(3) или если уж так нравится sizeof, то писать нужно что-то вроде

#define CMD "GET /index.html HTTP/1.0"
...
send(sock,CMD,sizeof(CMD),0);

Но это уже IMHO кривота...


"http запрос на с"
Отправлено jd , 16-Июл-04 14:13 
гоню, так всё-равно неправильно будет (sizeof даст длину вместе с нулём в конце, то есть на 1 больше)
так что используйте strlen