| 
| 
 | Вопрос # 3 348/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Решил научиться пользоваться WINSOCK'ом в Delphi. Прошло около получаса попыток и гугления информации и чужих примеров, как я понял, что тут мне не справиться без помощи экспертов :\
 В приложении к вопросу представлен мой код, который должен просто скачать по протоколу HTTP и вывести в консоль текст страницы, путь которой указан в константе HOST. Проблема заключается в том, что от сервера вообще ничего не приходит.
 Прошу помочь и показать, где у меня ошибка. Заранее благодарю.
 Приложение:Переключить в обычный режим program htmlget; {$APPTYPE CONSOLE} uses  SysUtils,  WinSock; var  sock: TSocket;  addr: sockaddr_in;  rbuff, rbuff0, wbuff: string;  bytes_recv: integer;  wsdata: WSAData;  pglen: integer; const  HOST = 'lannur.ru';  PORT = 80; begin   WSAStartup($0202, wsdata);  sock := socket(AF_INET, SOCK_STREAM, 0);  addr.sin_family := AF_INET;  addr.sin_port := htons(PORT);  addr.sin_addr.s_addr := inet_addr(PChar(HOST));  if connect(sock, addr, sizeof(addr)) = 0 then    writeln('Socket is opened...');  wbuff := 'GET / HTTP/1.1'+#13#10+'Host: '+HOST+#13#10#13#10;  send(sock, wbuff, Length(wbuff), 0);  repeat    listen(sock, 1);    recv(sock, rbuff0, 3072, 0);    rbuff := rbuff + rbuff0;  until Pos('Content-Length: ', PChar(rbuff)) = 0;  pglen := Length(                    Copy(rbuff, Pos('Content-Length: ', rbuff)+16, Pos(                    #13#10, Copy(rbuff, Pos('Content-Length: ', rbuff)+16,                    Length(rbuff)-Pos('Content-Length: ', rbuff)-16))-                    Pos('Content-Length: ', rbuff)-16)                 );  repeat    recv(sock, rbuff0, 3072, 0);    rbuff := rbuff + rbuff0;  until Pos(#13#10#13#10, rbuff) = 0;  Delete(rbuff, 1, Pos(#13#10#13#10, rbuff)+3);  repeat    recv(sock, rbuff0, 3072, 0);    rbuff := rbuff + rbuff0;  until Length(rbuff) < pglen;  closesocket(sock);  writeln(rbuff);  readln; end. 
|  |   Вопрос задал: dimedrol.tab (статус: Посетитель)Вопрос отправлен: 2 ноября 2009, 00:14
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 9; последнее сообщение — 4 ноября 2009, 22:48; участников в обсуждении: 3. 
|   | Вадим К (статус: Академик), 2 ноября 2009, 00:38 [#1]:listen не применяется для клиентских сокетом. И вызов его в середине кода точно не нужен. После вызова connect должны быть только чтение, запись и закрытие сокета. Сам GET запрос сформирован правдоподобно.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 2 ноября 2009, 08:30 [#2]:Дополню. Прогони под отладчиком, посмотри, чему равны переменные и содержимое буферов приёма.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | dimedrol.tab (статус: Посетитель), 2 ноября 2009, 17:19 [#3]:min@y™: Уже делал. В вопросе же написал, что от сервера ВООБЩЕ НИЧЕГО не приходит... Вадим К: Я знаю насчет listen. Сначала пробовал без него. Написал уже от отчаяния, потому что без него тоже ничего не получалось ):
 |  
|   | Вадим К (статус: Академик), 2 ноября 2009, 17:56 [#4]:ну писать бессмысленный код в надежде, что он заработает - не стоит. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | dimedrol.tab (статус: Посетитель), 3 ноября 2009, 00:39 [#5]:Согласен. А все же, что делать? Не может же быть, что эксперты не знают, как решить проблему? оО |  
|   | Вадим К (статус: Академик), 3 ноября 2009, 00:45 [#6]:я может быть и решил, вот только ноут второй с ремонта заберу, там винда с делфи осталась... Если есть "свой" сервер, то можно попробовать к нему подключаться, а потом смотреть в логи сервера. Там часто можно и диагностировать ошибку. Можно попробовать просто установить денвер или даже просто сам апач.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | dimedrol.tab (статус: Посетитель), 4 ноября 2009, 00:39 [#7]:Вадим К: Когда заберешь ноут и решишь, прошу, скинь рабочий код на ящик dimedrol.tab@gmail.com. Только не забудь, а то я уже впал в отчаяние ))):
 |  
|   | Вадим К (статус: Академик), 4 ноября 2009, 00:49 [#8]:сразу говорю - на почту сбрасывать не буду. Вообще то, просить на форуме сбросить ответ на почту считается признаком невежества. Тем более, в ещё жаловаться на себя. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | dimedrol.tab (статус: Посетитель), 4 ноября 2009, 22:48 [#9]:Вадим К: Извиняюсь, не знал. Просто могу случайно потерять ссылку на свой вопрос и забыть номер, было уже такое пару раз.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |