Главная arrow Статьи arrow Интернет и сеть arrow HTTP сервер за десять минут на Visual Basic  
05.12.2008 г.
Главное меню
Главная
Новости
Библиотека кодов
Исходники
Статьи
ActiveX
Софт
Бета-тестирование
Справочники
Медиа
Форум
Тесты
Блоги
Юмор
Ссылки
Для правообладателей
Личные сообщения
Предложить материал
Обмен баннерами
Контакты
Реклама
Админцентр
Рекомендуем
Школа латиноамериканских танцев SALSEROS
Softrate

Здесь может быть Ваша реклама!
Отблагодарить
Вам понравился этот сайт?
Вы хотите отблагодарить нас?
Вы можете это сделать, для этого поставьте на этот сайт ссылку со своего сайта или переведите деньги в фонд сайта на кошелек Z106793497010.
Рассылка
Регистрация
Вы все еще не зарегистрированы на форуме?
Познакомьтесь с программистами, спросите совета, найдите помощь в решении задачи или узнайте мнение программистов в опросе, зарегистрировавшись на форуме.
Нажмите сюда, чтобы зарегистрироваться прямо сейчас!
Программирование на Visual Basic 6/.NET/VBA/VBScript: исходники, коды, статьи
HTTP сервер за десять минут на Visual Basic

В этой статье я научу тебя, как сделать свой HTTP Server.
И так, нам понадобится:
1. Прямые руки
2. Visual Basic 6(в принципе, ты можешь переписать код под .NET)
3. Контрол ServerSocket для работы с сетевыми протоколами, который ты можешь скачать здесь. Он выполняет те же функции, что и стандартный WinSock, но использовать его значительно удобней. По вопросам работы control'a стучи в асю - 485312395
4. Любой Интернет браузер (например, Internet Explorer)
Собрав все перечисленное, создаем новый проект на VB и добавляем UserControl ServerSocket(комбинация Ctrl + D). Кидаем на форму одну копию контрола и называем его SS1. Открываем окно кода двойным щелчком мыши по пустому месту на форме и копируем туда следующий код.
Private Sub Form_Load()
SS1.Listen 80
End Sub
Теперь программа будет принимать данные на 80-й порт. В данном коде мы используем стандартный для HTTP протокола порт.

Теперь сделаем так, что бы программа выводила полученные по сети данные на экран.

Private Sub SS1_DataArrival(ByVal ID As Integer, ByVal Data As String)
MsgBox Data
End Sub

Как видно, переменная Data содержит все принятые данные. Опробуем код - запускаем наш проект и открываем в браузере адрес 127.0.0.1. Этот адрес используется для установки соединения с локальным компьютером. Активируем окно нашей программы и смотрим на появившееся сообщение. В нем содержится текст пакета, который отправляет браузер при запросе сайта. Итак, мы поймали этот пакет и теперь можем изучить его.

GET / HTTP/1.1

GET - тип запроса информации, кроме него есть POST(отправка данных формы) и HEAD(запрос информации о документе).
"/" - путь к документу, например, /index.html; здесь знак / означает главную страницу.
HTTP/1.1 - версия протокола.

Accept: MIME-типы документов, которые "понимет" браузер.
Accept-Language: предпочитаемый язык, например, ru.
User-Agent: версия браузера и ОС.
Host: хост сервера, который введен в браузере; широко используется серверами бесплатного хостинга, когда с одним IP адресом связано много доменных имен, для определения, к какому сайту обращается браузер.
Connection: держать соединение открытым - Keep-Alive, закрыть сразу после отправки данных - Close.
Так как мы пишем несложный Web сервер, нам понадобится только первая строчка пакета - GET  HTTP/1.1.
Давай рассмотрим схему работы нашей программы:
Браузер устанавливает соединение и передает запрос
Программа анализирует запрос. Что бы получить адрес файла, к которому обращается пользователь, используем функции Mid, InStr, InStrRev и Left.
Файл, указанный браузером считывается и передается
Соединение закрывается

Вот, что у нас получилось:

Private Sub SS1_DataArrival(ByVal ID As Integer, ByVal Data As String)
Dim Path$
Path = Left(Data, InStr(1, Data, vbCrLf) - 1)
'Отделяем первую строку
Path = Mid(Path, InStr(1, Path, " ") + 2)
Path = Left(Path, InStrRev(Path, " ") - 1)
'Берем адрес из строки
'Главная страница - index.htm
If Len(Path) = 0 Then Path = "index.htm"
'Защита от хакеров
If InStr(1, Path, "..\") Or InStr(1, Path, "../") Then
SS1.SendData ID, """.."" использовать в адресе не разрешено"
SS1.Kick ID, 1
Exit Sub
End If
On Error GoTo erropen
Dim f As Integer, Buf$, i As Long, l As Long
f = FreeFile
If Right(App.Path, 1) <> "\" Then Path = "/html/" & Path Else Path = "html/" & Path
'Избегаем ошибки, когда exe файл находится в корневой папке
Open App.Path & Replace(Path, "/", "\") For Binary Shared As #f
'Открываем файл
l = LOF(f)
'Длина файла
Data = ""
Do Until EOF(f)
If i + 1024 > l Then
i = i + 1
Buf = " "
Get #f, , Buf
Else
i = i + 1024
Buf = Space(1024)
Get #f, , Buf
End If
'Считываем фрагмент
Data = Data & Buf
If Len(Data) >= 10240 Then SS1.SendData ID, Data: Data = ""
'Отправляем 10 кб
Loop
SS1.SendData ID, Data
Close #f
SS1.Kick ID, 1
Exit Sub
erropen:
SS1.SendData ID, Err.Description
SS1.Kick ID, 1
End Sub

Теперь создаем папку html в папке проекта(App.Path) и помещаем туда html страницу index.htm с любым подходящим содержимым.

Теперь можно посмотреть на результаты нашей работы. Запускаем проект, открываем в браузере адрес 127.0.0.1 и смотрим на страницу index.htm.

Специально для тебя я подготовил архив с готовым проектом.

Теперь ты можешь на основе этой статьи сделать более навороченный сервер. В следующей части статьи я расскажу про указание MIME типов и еще кое-что, так что почаще заглядывай на сайт - продолжение следует.

P.S. Комментарии, отзывы и вопросы приветствуются.

Копирование, цитирование, хранение, перепечатка и/или публикация данной статьи разрешены только при обязательном указании ссылки на сайт http://www.vbcoding.org.ua , E-Mail автора и данного предупреждения. Статья может быть исправлена и/или дополнена автором без уведомления читателей.
Автор: Влад Таранов, vbpro@ukr.net.

 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:
Жирный Курсив Подчеркнутый Ссылка Список Цитата

Защитный код
Обновить

« Пред.   След. »
Добавить в закладки
 
 
Читайте еще
Лучшие файлы
Значок файла Руководство по Visual Basic 6 (52209)
(Справочники)

Значок файла VBProject (41145)
(Справочники)

Значок файла Создание приложений ОС Windows (32580)
(Справочники)

Значок файла Visual Basic с нуля (27702)
(Справочники)

Значок файла Азбука Visual Basic (22535)
(Справочники)

Значок файла Алгоритмы Visual Basic (22298)
(Справочники)

Значок файла MegaFlash VBHELP (20205)
(Справочники)

Новые файлы
Опросы
Как Вы узнали про этот сайт?

Кто на сайте?
Сейчас на сайте находятся:
2 гостей
IP адрес
Ваш IP адрес: 38.103.63.55 (38.103.63.55)