﻿#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Global $sTitle = 'MeinProgramm'
Global $sIPAddress
Global $sDynDns = 'test.ddns.net' ; <- hier die DynDns-Adresse eintragen
Global $iPort = 55555 ; beliebige Portnummer (sollte im Bereich zwischen 49152 und 65535 liegen)
Global $hGui, $idInput, $idCheckbox, $idConnect, $ConnectedSocket = -1, $sData, $sRecv

TCPStartup()
$hGui = GUICreate($sTitle & ' - Client', 360, 100)
$idCheckbox = GUICtrlCreateCheckbox('Checkbox', 10, 12, 90, 20)
$idInput = GUICtrlCreateInput('', 10, 50, 340, 20)
$idConnect = GUICtrlCreateButton('Connect', 100, 10, 100, 25)
GUISetState(@SW_SHOW, $hGui)
While True
	If $ConnectedSocket > 0 Then
		$sRecv = TCPRecv($ConnectedSocket, 2048) ; Daten abholen
		If $sRecv <> '' Then
			$sRecv = BinaryToString($sRecv, 4) ; Daten umwandeln
			If StringLeft($sRecv, 2) = 'cb' Then ; wenn Kommando "cb" empfangen, dann die folgende Zahl (1 oder 0) auswerten
				GUICtrlSetState($idCheckbox, StringMid($sRecv, 3, 1) = '1' ? $GUI_CHECKED : $GUI_UNCHECKED)
			EndIf
		EndIf
	EndIf
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $idConnect
			$sIPAddress = TCPNameToIP($sDynDns)
			If @error Then
				MsgBox($MB_ICONERROR + $MB_OK, $sTitle, 'IP-Adresse konnte nicht ermittelt werden!')
			Else
				$ConnectedSocket = TCPConnect($sIPAddress, $iPort) ; Verbindung zum Server herstellen
				If $ConnectedSocket < 1 Then
					MsgBox($MB_ICONERROR + $MB_OK, $sTitle, 'Verbindung konnte nicht hergestellt werden!')
				Else
					GUICtrlSetState($idConnect, $GUI_DISABLE)
					ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sIPAddress = ' & $sIPAddress & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
				EndIf
			EndIf
		Case $idCheckbox
			If $ConnectedSocket > 0 Then
				$sData = BitAND(GUICtrlRead($idCheckbox), $GUI_CHECKED) ? 'cb1' : 'cb0'
				TCPSend($ConnectedSocket, StringToBinary($sData, 4)) ; Daten an den Server senden
			EndIf
		Case $idInput
			If $ConnectedSocket > 0 Then
				$sData = GUICtrlRead($idInput)
				TCPSend($ConnectedSocket, StringToBinary($sData, 4)) ; Daten an den Server senden
			EndIf
	EndSwitch
WEnd
TCPCloseSocket($ConnectedSocket) ; Verbindung zum Server trennen
TCPShutdown()

Func _SendData($sData)
EndFunc
