Пример


Передача больших файлов

Скомпилируйте данный пример через AutoIt3 Wrapper и запустите.

Сервер будет открыт на всех IP адресах компьютера на порте 8081. Для завершения работы сервера, нажмите клавишу F1.

 

AutoItSetOption("MustDeclareVars", 1)

#include "Http SC.inc"
#include "Http SC Error.inc"
#include "GelAllIp.au3"
#include <File.au3>

; Объявляем переменные
Global $aServer, $vSendData, $aBanList, $hOptimizationTimer, $fWhile


; Задаем папку с большими файлами (эта папка станет домашним каталогом сервера)
Global $sContentFolder = FileSelectFolder("Укажите папку с большими файлами...", "", 1+2+4, "C:", 0)
    If @Error Then Exit -1


; Создаем сервер
$aServer = _HttpSC_CreateServer($aBanList, _GelAllIp(1), 8081, "My server", 0, @ScriptDir&"\My Server.log")
    If @Error Then Exit MsgBox(16, "CreateServer", _HttpSCError_ConvertError2Text(@Error, @Extended, True)); Ошибка

; Настраиваем сервер
_HttpSC_ConfigServer($aServer, 20, 45, 65)
    If @Error Then
    MsgBox(16, "ConfigServer", _HttpSCError_ConvertError2Text(@Error, @Extended, True)); Ошибка
    _HttpSC_DeleteServer($aServer, $aBanList)
    Exit 2
    EndIF

; Запускаем сервер
_HttpSC_StartServer($aServer, $aBanList)
    If @Error Then
    MsgBox(16, "StartServer", _HttpSCError_ConvertError2Text(@Error, @Extended, True)); Ошибка
    _HttpSC_DeleteServer($aServer, $aBanList)
    Exit 3
    EndIF

; Выводим уведомление
MsgBox(0,"StartServer","Сервер запущен на всех IP адресах сервера; порт сервера: 8081. Нажмите F1 для выхода!", 5)
$fWhile = 1
HotKeySet("{F1}", "_Exit")
$hOptimizationTimer = TimerInit();  Таймер оптимизации сервера

While $fWhile
    _HttpSC_ServerHandler($aServer, $aBanList, "_GetServerFile", "_Post", "_OtherReqest", "")
    Sleep(250)
    If TimerDiff($hOptimizationTimer) >= 3*60*1000 Then;            3*60*1000 = 3 мин. * 60 сек. * 1000 мсек.
        _HttpSC_ServerOptimization($aServer, 1)
        $hOptimizationTimer = TimerInit();          Устанавливаем новый таймер
    EndIF
Wend


HotKeySet("{F1}")

; Останавливаем и удаляем сервер
_HttpSC_DeleteServer($aServer, $aBanList)
    If @Error Then MsgBox(16, "DeleteServer", _HttpSCError_ConvertError2Text(@Error, @Extended, True)); Ошибка
Exit



; Функция обработки GET запроса
Func _GetServerFile($sUrl, $hUserSocket, $sUserIp, $sHttpVer, $Reqest)
    If $sUrl = "/" Then
    $vSendData =        '<head>'&@CRLF
    $vSendData &=       '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'&@CRLF
    $vSendData &=       '<title>HttpSC</title>'&@CRLF
    $vSendData &=       '</head>'&@CRLF
    $vSendData &=       ''&@CRLF
    $vSendData &=       '<p align="center"><font size="5"><b>HttpSC</b></font></p>'&@CRLF
    Local $aFiles = _FileListToArray($sContentFolder, "*", 1)
        If NOT @Error Then
        Local $i
        For $i = 1 To $aFiles[0]
        $vSendData &= '<p align="left" style="margin-top: 0; margin-bottom: 0">• <font size="4"><a href="'&$aFiles[$i]&'">'&$aFiles[$i]&'</a></font></p>'&@CRLF
        Next
        EndIF
    Return _HttpSC_CreateAnswer($aServer, $vSendData, "HTTP/1.1", "200 Ok",  _HttpSC_ConvertLastModifiedTime())
    Else
        Local $sFilePutch = $sContentFolder&""&StringReplace(__HttpSC_Encoding_URIDecode($sUrl) , "/", "\")
        If FileExists($sFilePutch) Then
        Return _HttpSC_CreateBigFileAnswer($aServer, $sFilePutch, "HTTP/1.1", "200 Ok",  _HttpSC_ConvertLastModifiedTime(), _HttpSC_FileGetMimeType($sFilePutch))
        Else
    $vSendData =        '<head>'&@CRLF
    $vSendData &=       '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'&@CRLF
    $vSendData &=       '<title>HttpSC</title>'&@CRLF
    $vSendData &=       '</head>'&@CRLF
    $vSendData &=       ''&@CRLF
    $vSendData &=       '<p align="center"><font size="5"><b>HttpSC - 404</b></font></p>'&@CRLF
        Return _HttpSC_CreateAnswer($aServer, $vSendData, "HTTP/1.1", "404 Not Found",  _HttpSC_ConvertLastModifiedTime())
        EndIF
    EndIF
EndFunc


Func _OtherReqest($hUserSocket, $sUserIp, $Reqest)
Return ""
EndFunc


Func _Post($sUrl, $hUserSocket, $sUserIp, $sHttpVer, $Reqest)
Return ""
EndFunc


Func _Exit()
$fWhile = 0
EndFunc

 

 

См. также

Начало