Что нового

Сервер написанный на AutoIt будет работать на Ubuntu под Wine?

eBug

Новичок
Сообщения
4
Репутация
0
Пример сервера:

Код:
#include <GUIConstantsEx.au3>

Example()
Func Example()
   Local $szIPADDRESS = @IPAddress1
   Local $nPORT = 33891
   Local $MainSocket, $edit, $ConnectedSocket, $szIP_Accepted
   Local $msg, $recv
   
   TCPStartup()
   $MainSocket = TCPListen($szIPADDRESS, $nPORT)
   If $MainSocket = -1 Then Exit
   
   GUICreate("My Server (IP: " & $szIPADDRESS & ")", 300, 200, 100, 100)
   $edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
   GUISetState()
   
   $ConnectedSocket = -1
   
   Do
	  $ConnectedSocket = TCPAccept($MainSocket)
   Until $ConnectedSocket <> -1
   
   $szIP_Accepted = SocketToIP($ConnectedSocket)
   
   While 1
	  $msg = GUIGetMsg()
	  If $msg = $GUI_EVENT_CLOSE Then ExitLoop
	  $recv = TCPRecv($ConnectedSocket, 2048)
	  If @error Then ExitLoop
	  $recv = BinaryToString($recv, 4)
	  If $recv <> "" Then GUICtrlSetData($edit, $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
   WEnd
   
   If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
   TCPShutdown()
EndFunc

Func SocketToIP($SHOCKET)
   Local $sockaddr, $aRet
   $sockaddr = DllStructCreate("short;ushort;uint;char[8]")
   $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
   If Not @error And $aRet[0] = 0 Then
	  $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
	  If Not @error Then $aRet = $aRet[0]
   Else
	  $aRet = 0
   EndIf
   $sockaddr = 0
   Return $aRet
EndFunc
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Работать будет, но такое решение назвать надежным нельзя. ИМХО, серверная часть должна быть стабильной...
 
Верх