kasper_sky
Antivirus
- Сообщения
- 116
- Репутация
- 1
Доброго времени суток.
Захотелось на днях дурью помаяться - написал мини-вебсервер на автоите.
Вот только незадача - работает он то через раз, то через два раза.
Видимо, проблема заключается в недостачи знаний о TCP и HTTP.
Поможете привести в рабочее состояние?
К серверу, как видите, нужно обращаться через браузер по IP 127.0.0.1
Код:
Захотелось на днях дурью помаяться - написал мини-вебсервер на автоите.
Вот только незадача - работает он то через раз, то через два раза.
Видимо, проблема заключается в недостачи знаний о TCP и HTTP.
Поможете привести в рабочее состояние?
К серверу, как видите, нужно обращаться через браузер по IP 127.0.0.1
Код:
Код:
Global $ip = '127.0.0.1', $port = 80
GuiCreate('web server', 700, 500)
$edit = GUICtrlCreateEdit('', 0, 0, 700, 500)
GUISetState()
TCPStartup()
$socket = TCPListen($ip, $port)
If $socket = -1 Then Exit
$conn_socket = -1
GUICtrlSetData($edit, GUICtrlRead($edit) & '$socket = ' & $socket & @CRLF & @CRLF)
Do
$conn_socket = TCPAccept($socket)
If $conn_socket <> -1 Then
Do
$recv = TCPRecv($conn_socket, 10240)
If $recv <> '' Then
GUICtrlSetData($edit, GUICtrlRead($edit) & 'Received: <<' & $recv & '>>' & @CRLF)
If _ProcessRequestedPage($recv) Then
If FileRead(_ProcessRequestedPage($recv)) <> '' Then
$read = FileRead(_ProcessRequestedPage($recv))
$size = FileGetSize(_ProcessRequestedPage($recv))
TCPSend($conn_socket, _HttpHead($size) & $read)
GUICtrlSetData($edit, GUICtrlRead($edit) & 'Send: <<' & _HttpHead($size) & '>>' & @CRLF)
Else
TCPSend($conn_socket, 'HTTP/1.1 404')
EndIf
EndIf
TCPCloseSocket($conn_socket)
GUICtrlSetData($edit, GUICtrlRead($edit) & '$conn_socket = ' & $conn_socket & @CRLF)
$conn_socket = -1
EndIf
Until $conn_socket = -1
GUICtrlSetData($edit, GUICtrlRead($edit) & '$conn_socket = -1' & @CRLF & @CRLF)
EndIf
Until False
Func _ProcessRequestedPage($data)
$sre = StringRegExp($data, '(GET /)(.*?)( HTTP)', 1)
If IsArray($sre) Then
If $sre[1] = '' Then
Return 'index.html'
Else
Return $sre[1] & '.html'
EndIf
Else
Return 0
EndIf
EndFunc
Func _HttpHead($s)
Return 'HTTP/1.1 200 OK' & @CRLF & 'Server: AutoIt' & @CRLF & 'Content-Type: text/html' & _
@CRLF & 'Connection: Close' & @CRLF & 'Content-Length: ' & $s & @CRLF & @CRLF
EndFunc