Hallo
Ich habe ein kleines Problem.. und zwar habe ich einen kleinen Server geschrieben (für einen Chat) und der Konflikt ist der , dass wenn man den Button drückt (um den Status zu ändern) er in der zweiten While-Schleife hängen bleibt bzw. die äußere nicht mehr beachtet (Das Programm handelt sogesehen komplett logisch und richtig nur möchte ich , dass beide Schleifen komplett unabhängig von einander agieren)
Also einmal die Whileschleife für die Form selbst (z. B. fürs Beenden der Anwendung) und eine für das Empfangen der Pakete.
Wie setze ich das am besten um? Und hat das überhaupt was mit Multithreading zutun oder bin ich einfach zu blöd?
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 437, 467, 327, 133)
$Aus = GUICtrlCreateButton("OFFLINE", 24, 405, 385, 33)
GUICtrlSetColor($Aus,0xff0000)
GUICtrlCreateEdit("", 24, 16, 385, 377)
GUISetState(@SW_SHOW)
$i = 0; ein aus 0 = aus 1 = an
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Aus
if $i = "0" Then
GUICtrlSetData($Aus,"ONLINE")
GUICtrlSetColor($Aus,0x009900)
$i = 1
TCPStartup() ; TCP wird initialisiert´
$mainsocket = TCPListen("127.0.0.1", 4321) ; mainsocket erstellen
While 1 ; Endlosschleife
$acceptedSocket = TCPAccept($mainsocket) ; versuchen eine mögliche Verbindung anzunehmen
If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
$nachricht= TCPRecv($acceptedSocket, 2048) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
MsgBox(64, "Nachricht empfangen!", "Inhalt der Nachricht " & $nachricht)
TCPCloseSocket($acceptedSocket)
EndIf
WEnd
ElseIf $i = "1" Then
GUICtrlSetData($Aus,"OFFLINE")
GUICtrlSetColor($Aus,0xff0000)
$i = 0
TCPShutdown();
EndIf
EndSwitch
WEnd
[img]data:image/gif,GIF89a