VBCoding Статьи Visual Basic 6 Интернет и сеть HTTP сервер за десять минут на Visual Basic

Visual Basic 6
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 автора и данного предупреждения. Статья может быть исправлена и/или дополнена автором без уведомления читателей.
Автор: Влад Таранов, Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript .

 

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


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

 
VBCoding Статьи Visual Basic 6 Интернет и сеть HTTP сервер за десять минут на Visual Basic  
Powered by Exponenta -