Пример
Передача больших файлов
Скомпилируйте данный пример через 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 |
См. также