Доброго времени суток))
Весь день возился с кодом....но так и ошибку не могу найти - проверял не один десяток раз! Проблема в том,что когда выделяю айпи в гуи - ничего не происходит...
Гляньте пожалуйста,в чем может быть проблема ? :wacko: :wacko: :wacko: голова кругом.
Чувствую,что решение гдето рядом...
Будущий сервер :
Будущий клиент :
Весь день возился с кодом....но так и ошибку не могу найти - проверял не один десяток раз! Проблема в том,что когда выделяю айпи в гуи - ничего не происходит...
Гляньте пожалуйста,в чем может быть проблема ? :wacko: :wacko: :wacko: голова кругом.
Чувствую,что решение гдето рядом...
Будущий сервер :
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
$IP = '192.168.0.1'
$port = 59888
Global $aSockets, $i, $rep, $MainSocket, $socket, $result, $IP, $port, $ipBotOld
$GUI = GUICreate("Server", 970, 618, 108, 292)
$GenGUI = GUICtrlCreateList("", 0, 0, 820, 567, BitOR($LBS_SORT, $LBS_STANDARD, $WS_VSCROLL, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
$BotsGUI = GUICtrlCreateList("", 820, 0, 149, 567, BitOR($LBS_SORT, $LBS_STANDARD, $WS_VSCROLL, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
$InputString = GUICtrlCreateEdit("", 0, 568, 969, 49, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_VSCROLL))
GUICtrlSetFont($GenGUI, 12, 200, 1, "Georgia")
GUICtrlSetFont($BotsGUI, 12, 200, 1, "Georgia")
GUICtrlSetFont($InputString, 12, 200, 1, "Georgia")
GUISetState(@SW_SHOW)
TCPStartup()
$MainSocket = TCPListen($IP, $port, 1000) ;Создаем слушающий сокет, по указанному адресу
Dim $aSockets[1] = [0]
While 1
$MainSocket_A = TCPAccept($MainSocket) ;Указыываем ОС создать сокет если появилось входящее подключение в прослушиваемом сокете
$result = ReceiveData($MainSocket_A) ;проверяем входящее соединение на наличие пакета
If $result = '' Or $result = '0' Then
Else
$SocketToIp = SocketToIP($MainSocket_A)
GUICtrlSetData($BotsGUI, $SocketToIp)
GUICtrlSetData($GenGUI, ' ' & $SocketToIp & ' >> ' & $result)
Sleep(100)
TCPCloseSocket($MainSocket_A);Закрываем сокет
EndIf
$ipBot = GUICtrlRead($BotsGUI)
If $ipBot = '' Or $ipBot = $ipBotOld Then
Else
GUICtrlSetData($GenGUI, 'запрос данных...')
MsgBox(16, '', $ipBot & ':' & $port)
$socket = TCPConnect($ipBot, $port)
TCPSend($socket, 'ping')
Sleep(100)
TCPCloseSocket($socket)
$ipBotOld = $ipBot
EndIf
Sleep(100)
WEnd
TCPShutdown()
Func SendingData($MainSocket_A0, $data)
$socket = TCPConnect(SocketToIP($MainSocket_A0), $port);Указыываем ОС создать сокет, подключенный к указанному адресу
Return TCPSend($socket, $data);Отправляем данные на сервер
Sleep(100)
TCPCloseSocket($socket)
EndFunc ;==>SendingData
Func ReceiveData($ConnectedSocket)
If $ConnectedSocket <> -1 Then
$aSockets[0] += 1
ReDim $aSockets[$aSockets[0] + 1]
$aSockets[$aSockets[0]] = $ConnectedSocket
EndIf
For $i = 1 To $aSockets[0]
Return TCPRecv($aSockets[$i], 256, 0)
If @error Then
TCPCloseSocket($aSockets[$i]) ; Закрываем нужный сокет
For $j = $i To $aSockets[0] - 1
$aSockets[$j] = $aSockets[$j + 1]
Next
$aSockets[0] -= 1
ReDim $aSockets[$aSockets[0] + 1]
ContinueLoop 2
EndIf
Sleep(5)
Next
EndFunc ;==>ReceiveData
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 ;==>SocketToIP
Будущий клиент :
Код:
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=0
#AutoIt3Wrapper_UseUpx=n
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
TCPStartup();Инициировать использование службы TCP
$nIP = '192.168.0.6' ;адресс сервера
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
$port = 59888 ;Указываем порт к которому будем подключаться
$tTime = TimerInit()
Do
$socket = TCPConnect('192.168.0.1', $port);Указыываем ОС создать сокет, подключенный к указанному адресу
Until $socket <> -1
TCPSend($socket, @ComputerName & ' онлайн (в сети уже ' & TimerDiff($tTime) / 1000 & ')');Отправляем данные на сервер
Sleep(100)
TCPCloseSocket($socket)
Sleep(100)
$MainSocket = TCPListen($nIP, $port, 2) ; создаем прослушивающий СОКЕТ
While 1
$ConnectedSocket = TCPAccept($MainSocket) ;Указыываем ОС создать сокет если появилось входящее подключение в прослушиваемом сокете
If $ConnectedSocket <> -1 Then ;проверяем входящее соединение на наличие пакета
While 1
$result = TCPRecv($ConnectedSocket, 2048)
If $result <> '' Then ;если данные есть,то принимаем первые 2048
If $result = 'ping' Then
MsgBox(16, '', 'ping : yes')
$socket = TCPConnect(SocketToIP($ConnectedSocket), $port);Указыываем ОС создать сокет, подключенный к указанному адресу
Sleep(1000)
SocketToIP($ConnectedSocket)
Sleep(1000)
TCPSend($socket, "time " & @MDAY & "-" & @MON & "-" & @YEAR & " / " & @HOUR & ":" & @MIN & ":" & @SEC)
Sleep(1000)
TCPCloseSocket($socket)
EndIf
Sleep(25)
Else
ExitLoop
EndIf
WEnd
EndIf
Sleep(200)
WEnd
TCPShutdown();Завершить использование службы TCP
Func SendingData($MainSocket_A0, $data)
$socket = TCPConnect(SocketToIP($MainSocket_A0), $port);Указыываем ОС создать сокет, подключенный к указанному адресу
Return TCPSend($socket, $data);Отправляем данные на сервер
Sleep(100)
TCPCloseSocket($socket)
EndFunc ;==>SendingData
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 ;==>SocketToIP