Приветствую Вас Гость
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

  • Главная страница
  • Форум (Новoe на форуме)
  • Быстрый старт
  • Блог
  • Видео уроки
  • Каталог файлов
  • Статьи и уроки
  • Юзербары
  • FAQ
  • Обратная связь
  • Для начинающих [9]
    Заморочки [4]
    Для немного понимающих 39длл [9]
    Сложный уровень [4]

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    [ Кто нас сегодня посетил ]
    Главная » Статьи » Статьи » Сложный уровень

    HTTP протоколы на 39DLL.
    HTTP протоколы на 39DLL.  39ster(Сержем Хамфри)


    Эта обучающая программа была написана, чтобы помочь программистам общаться с базируемыми протоколами текста, такими как HTTP, IRC, и т.д. Обучающая программа написана для 39DLL расширение, которое предоставляет Вам доступ к гнездам окон, который обязан общаться с этими протоколами.


    Материал, чтобы знать прежде, чем Вы прочитаете обучающую программу:
    [crlf] = (New Line) chr(13) + chr(10)

    1. Начинание
    Первая вещь, которую Вы должны сделать, соединяются с сервером, с которым Вы хотите общаться. Чтобы сделать это, используйте dll39_tcp_connect () функция, чтобы соединиться с сервером.

    sockId = dll39_tcp_connect("www.google.com.au",80,0);
    if (!sockId)
      show_message("Unable to connect to google");

    Вышеупомянутый кодекс попытается соединиться с googles сервером на порту 80 (HTTP использует порт 80). Если это будет не в состоянии соединиться по какой-либо причине, то это покажет сообщение об ошибке.


    Как только мы успешно соединились с сервером, мы должны изменить наш способ формата для гнезда. Поскольку 39DLL был разработан для игр, по умолчанию это посылает сообщения в формате, который несовместим с базируемыми протоколами текста. Изменить формат, чтобы сделать наши пакеты совместимыми с текстом базировало форматы, мы используем функцию dll39_set_format.

    dll39_set_format(sockId,dll39_format_text,chr(13) + chr(10));

    Вышеупомянутый кодекс изменит способ формата для нашего гнезда, чтобы отформатировать метод dll39_format_text. В методе dll39_format_text формата все наши сообщения посылают с символической последовательностью, добавленной до конца этого. Эта символическая последовательность также используется для того, чтобы получить сообщения, чтобы позволить dll39_message_receive () знают, что мы только хотим получить, пока мы не достигаем той символической последовательности. В этом случае мы только хотим получить так много байты, пока мы не добираемся до характеров chr (13) + chr (10). chr (13) + chr (10) называют новой линией. Так другими словами мы только хотим получить одну линию за один раз.

    Так, если наш модем получает этот пакет:

    GET /blah HTTP/1.1[crlf] 
    Host: something.com[crlf] 
    [crlf]

    Мы только получили бы первую линию (линия, начинающаяся с, GET),




    2. Посылка сообщения 
    Теперь, когда мы связаны с сервером, мы должны послать сообщение для чего-то, чтобы произойти. Так, если мы хотим выполнить файл PHP на удаленном сервере, мы должны построить ПОЛУЧИТЬ запрос и послать его через гнездо. Позволяет говорят, что файл называют "myfile.php", и Вы обычно выполняете это, идя в этот URL:

    http://google.com.au/myfile.php?msg=HELLO

    Чтобы сделать это точное та же самая вещь в расширении, мы делаем это:

    newLine = chr(13) + chr(10);
    dll39_buffer_clear(0);
    dll39_write_chars("GET /myfile.php?msg=HELLO HTTP/1.0" + newLine,0);
    dll39_write_chars("Host: www.google.com.au" + newLine,0);
    dll39_message_send(sockId,0,0,0);

    Отметьте: Обычно в HTTP получают запрос, Вы обязаны добавлять один дополнительный бланк newLine в конце пакета, но способ формата автоматически добавляет newline характеры для нас.




    Вышеупомянутый кодекс напишет получить запрос буферу и пошлет его через наше гнездо. Наш пакет будет похож на это:

    GET /myfile.php?msg=HELLO HTTP/1.0[crlf] 
    Host: www.google.com.au[crlf] 
    [crlf]

    Thats все Вы должны сделать, чтобы выполнить php файл.




    3. Получение данных от сервера

    Как только Вы послали свое сообщение в сервер, Вы можете ожидать получать что-то назад. php файл может содержать данные, которые Вы хотите использовать в Вашей игре.

    processHeader = true;
    while(processHeader)
    {
      dll39_message_receive(sockId,0,0);
      firstWord = dll39_read_sep(newLine,0);
      switch(firstWord)
      {
      case "": //blank line
      processHeader = false;
      break;
       
      //read important stuff from header...
      }
    }

    Вышеупомянутый кодекс получит каждую линию заголовка ответа. Как только мы получили весь заголовок ответа, данным, посланным из php файла, посылают (полезный груз). Чтобы получить это, мы должны изменить наш способ формата на dll39_format_none, потому что мы не хотим, чтобы наш dll39_message_receive () читал в любом определенном формате.

    dll39_set_format(sockId,dll39_format_none,'');
    retVal = "";
    while(1)
    {
      size = dll39_message_receive(sockId,6000,0);
      if(size > 0)
      retVal += dll39_read_chars(size,0);
      else break;
    }
    show_message(retVal);
    dll39_socket_close(sockId);

    Вышеупомянутый кодекс получит весь полезный груз и поместит его в переменную "retVal" чем шоу он в show_message ()

    Это - то, на что будет похож наш кодекс конца:

    {
      sockId = dll39_tcp_connect("www.google.com.au",80,0);
      if(!sockId)
      {
      show_message("Unable to connect to google");
      exit;
      }
       
      dll39_set_format(sockId,dll39_format_text,chr(13) + chr(10));
       
      newLine = chr(13) + chr(10);
      dll39_buffer_clear(0);
      dll39_write_chars("GET /myfile.php?msg=HELLO HTTP/1.0" + newLine,0);
      dll39_write_chars("Host: www.google.com.au" + newLine,0);
      dll39_message_send(sockId,0,0,0);
       
      processHeader = true;
      while(processHeader)
      {
      dll39_message_receive(sockId,0,0);
      firstWord = dll39_read_sep(" ",0);
      switch(firstWord)
      {
      case "": //blank line
      processHeader = false;
      break;
       
      //read important stuff from header...
      }
      }
       
      dll39_set_format(sockId,dll39_format_none,'');
      retVal = "";
      while(1)
      {
      size = dll39_message_receive(sockId,6000,0);
      if(size > 0)
      retVal += dll39_read_chars(size,0);
      else break;
      }
      show_message(retVal);
      dll39_socket_close(sockId);
    }

    Перевод: zxc76 (особо не старался, делал для себя)

    Автор:39ster(Сержем Хамфри)


    Категория: Сложный уровень | Добавил: zxc76 (26.09.2010) | Автор: Сержем Хамфри
    Просмотров: 832 | Рейтинг: 3.0/2
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    -->


    Логин:
    Пароль:

    Хостинг от uCoz