Hi @all
ich hab zum Spaß mal angefangen einen IM(Instant Messenger) zu schreiben. Er funktioniert nur nicht wirklich und ich hab auch keine Ahnung was falsch läuft und es jetzt nach ~10Stunden Fehlersuche aufgegeben...
Vielleicht hat einer von euch ja Spaß dran ihn mal auseinander zunehmen.
Server:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <inet.au3>
Opt("TrayMenuMode",1)
$Mainwindow = GUICreate("Server", @DesktopWidth /100*25, @DesktopHeight/100*15, -1, -1, BitOR($WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX), $WS_EX_ACCEPTFILES) ;, $WS_VSCROLL
GUISetState(@sw_Hide)
$Liste = GUICtrlCreateListView("Benutzername | IP-Adresse | ON/Offline | Letzter Login | E-Mail Adresse", 10, 10, @DesktopWidth /100*25-10, @DesktopHeight/100*15-10)
$WanIp = _GetIP()
$User = 1
$MIP = @IPAddress1
TraySetIcon("Shell32.dll", -19)
$IPanfordern = TrayCreateMenu("IP?")
$Ipextern = TrayCreateItem($WanIP, $IPanfordern)
$IPintern1 = TrayCreateItem(@ipaddress1, $IPanfordern)
$IPintern2 = TrayCreateItem(@IPAddress2, $IPanfordern)
$IPintern3 = TrayCreateItem(@IPAddress3, $IPanfordern)
$SERVERSTAT = TrayCreateItem("Serverstatistik")
$SSHUTDOWN = TrayCreateItem("Server beenden")
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
TCPStartup()
$MSocket = TCPListen($MIP, 6221, 9999)
If @error = -1 Then
MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
Else
MsgBox(64, "Server", "Server gestartet :)")
EndIf
While 1
;~ $Start = TimerInit()
$GUIMsg = GUIGetMsg()
$SMsg = TCPAccept($Msocket)
$eingehendeIP = SockettoIP($SMsg)
;~ If TimerDiff($start) >= 60000 Then
;~ TrayTip("$SMSG", $SMSG,10)
If $SMsg <> -1 Then
$check = 0
While $Check = 0
$Msg = TCPRecv($SMsg, 9999)
If $Msg <> "" Then
$eingehendeIP = SockettoIP($SMsg)
$Neu = StringLeft($MSG, ![]()
If $Neu = "$ACCNEU|" Then
$ACCDAten = StringSplit($MSG, "|")
IniReadSection(@scriptdir & "\Benutzer.ini", $ACCDATEN[2])
If @error = 1 Then
TCPStartup()
IniWrite(@scriptdir & "\Benutzer.ini", $ACCDATEN[2], "Passwort", $ACCDATEN[4])
IniWrite(@scriptdir & "\Benutzer.ini", $ACCDATEN[2], "E-Mail Adresse", $ACCDATEN[6])
IniWrite(@scriptdir & "\Benutzer.ini", $ACCDATEN[2], "IP", $eingehendeIP)
IniWrite(@scriptdir & "\Benutzer.ini", $ACCDATEN[2], "LoginZeit", "Noch nicht eingeloggt")
IniWrite(@scriptdir & "\Benutzer.ini", $ACCDATEN[2], "On", "Neu")
$Antwort = TCPConnect($EingehendeIP, 6221)
TCPSend($Antwort, "Benutzer erfolgreich erstellt.")
TrayTip("Neuer Benutzer:", $ACCDATEN[2], 10, 1)
Else
TCPStartup()
$Antwort = TCPConnect($EingehendeIP, 6221)
$send = TCPSend($Antwort, "Benutzername nicht verfügbar!")
EndIf
$Check = 1
EndIf
If $MSg = "Verbindemich" Then
TCPStartup()
$Antwort = TCPConnect($EingehendeIP, 6221)
TCPSend($Antwort, "Erfolgreich verbunden :)")
TrayTip("Neue Verbindung mit:", $eingehendeIP, 10, 1)
$check = 1
EndIf
If $Neu = "Benutzer" Then
$Anmeldung = StringSplit($MSG, ":")
IniReadSection(@scriptdir & "\Benutzer.ini", $Anmeldung[2])
If @error = 1 Then
TCPStartup()
$Antwort = TCPConnect($EingehendeIP, 6221)
$send = TCPSend($Antwort, "Benutzername nicht nicht registriert!")
$check = 1
Else
$PWCHECK = IniReadSection(@scriptdir & "\Benutzer.ini", $Anmeldung[2])
If $PWCHECK[1][1] = $Anmeldung[4] Then
IniWrite(@scriptdir & "\Benutzer.ini", $Anmeldung[2], "IP", $EingehendeIP)
$zeit = @YEAR &"."& @MON &"."& @WDAY &" "& @HOUR & ":"&@MIN & ":"& @SEC &"."& @MSEC
IniWrite(@scriptdir & "\Benutzer.ini", $Anmeldung[2], "LoginZeit", $zeit)
IniWrite(@scriptdir & "\Benutzer.ini", $Anmeldung[2], "ON", "On")
TCPStartup()
$Antwort = TCPConnect($EingehendeIP, 6221)
$send = TCPSend($Antwort, "Erfolgreich eingeloggt ;)")
TrayTip("Benutzer hat sich eingeloggt:", $Anmeldung[2], 10, 1)
$check = 1
Else
TCPStartup()
$Antwort = TCPConnect($EingehendeIP, 6221)
$send = TCPSend($Antwort, "Falsches Passwort!")
TrayTip("Falsches Passwort von:", $Anmeldung[2] & " @ IP" & $EingehendeIP, 10, 2)
EndIf
$Check = 1
EndIf
EndIf
If $Neu = "binwech8" Then
$Abmeldung = StringSplit($MSG, ":")
IniWrite(@scriptdir & "\Benutzer.ini", $Abmeldung[1], "ON", "OFF")
TrayTip("User hat sich abgemeldet:", $abmeldung[1], 10, 1)
$check = 1
EndIf
EndIf
WEnd
EndIf
$TrayMSG = TrayGetMsg()
If $TrayMsg = $Ipextern Then
ClipPut($WanIP)
EndIf
If $TrayMsg = $Ipintern1 Then
ClipPut(@ipaddress1)
EndIf
If $TrayMsg = $Ipintern2 Then
ClipPut(@IPAddress2)
EndIf
If $TrayMsg = $Ipintern3 Then
ClipPut(@ipaddress3)
EndIf
If $TrayMSG = $SShutdown Then
$MSGBOXANTWORT = MsgBox(4, "Sicher beenden?", "Den Server wirklich beenden? Alle Verbindungen werden getrennt!")
If $MSGBOXANTWORT = 6 Then
Exit
Else
EndIf
EndIf
If $TrayMSG = $SERVERSTAT Then
$ininutzer = IniReadSectionNames(@ScriptDir & "\Benutzer.ini")
If @error Then
MsgBox(0, "Fehler", "Es besteht noch keine Benutzerdatei!")
ExitLoop
EndIf
$Listtext = GUICtrlCreateListViewItem("", $Liste)
GUICtrlSetData($Listtext, "")
For $i = 1 To $ininutzer[0]
$ininutzerdaten = IniReadSection(@ScriptDir & "\Benutzer.ini", $ininutzer[$i])
$Listviewtext = $ininutzer[$i] &"|"& $ininutzerdaten[$i-$i+3][1] &"|"& $ininutzerdaten[$i-$i+5][1] &"|"& $ininutzerdaten[$i-$i+4][1] &"|"& $ininutzerdaten[$i-$i+2][1]
$Listtext = GUICtrlCreateListViewItem($listviewtext, $Liste)
GUICtrlSetData($Listtext,$ininutzer[$i])
GUISetState(@sw_show, $mainwindow)
WinActivate("Server")
Next
EndIf
If $GUImsg = $GUI_EVENT_CLOSE Then
GUISetState(@sw_hide, $mainwindow)
EndIf
WEnd
Client:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <ListboxConstants.au3>
#include <TabConstants.au3>
#include <Constants.au3>
TraySetIcon("Shell32.dll", -14)
Opt("TrayMenuMode",1)
$GuiL = 600
$GUIH = 500
$GuiCLient = GUICreate("Client", $GuiL, $GUiH, -1, -1, BitOR($WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX))
GUISetState(@SW_Show)
$Name = GUICtrlCreateInput("Accountname", $GUIL-110, $GUIH-100, 100, 20)
$PW = GUICtrlCreateInput("Passwort", $GUIL-110, $GUIH-75, 100, 20, $ES_PASSWORD)
$Einloggen = GUICtrlCreateButton("Einloggen", $GUIL-110, $GUIH-50, 100, 20)
$Anmelden = GUICtrlCreateButton("Anmelden", $GUIL-110, $GUIH-125, 100, 20)
$EIP = GUICtrlCreateInput("Server IP", $GUIL-110, $GUIH-200, 100, 20)
$Verbinden = GUICtrlCreateButton("Verbinden", $GUIL-110, $GUIH-175, 100, 20)
$bild = GUICtrlCreatePic(@ScriptDir & "\nemo-popup.jpg" , 0, 0, $GuiL, $GuiH, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS,$Ws_Disabled))
$Ausloggen = GUICtrlCreateButton("Ausloggen", $GUIL-110, $GUIH-50, 100, 20)
GUICtrlSetState($Ausloggen, $GUI_Hide)
$Eingabe = GUICtrlCreateEdit("", $GuiL-590, $GuiH-100, 400, 50, $LBS_DISABLENOSCROLL + $WS_VSCROLL)
GUICtrlSetState($Eingabe, $GUI_Hide)
$NAbschicken = GUICtrlCreateButton("Abschicken", $GUIL-185, $Guih-100, 70, 50)
GUICtrlSetState($Nabschicken, $GUI_Hide)
$MIP = @IPAddress1
$verbunden = 0
$Eingeloggt = 0
$Chatfenster = GUICtrlCreateTab(10, 10, 400, 350)
$1 = GUICtrlCreateTabItem("1")
$2 = GUICtrlCreateTabItem("2")
$3s = GUICtrlCreateTabItem("3")
GUICtrlSetState($Chatfenster, $GUI_Hide)
$Beenden = TrayCreateItem("Exit")
$Maximieren = TrayCreateItem("Client")
$Liste1 = GUiCTRLCReatelist("Liste", $Guil-180, $GUIH-468, 165, 331)
GUICtrlSetState($Liste1, $GUI_hide)
;~ HotKeySet("{Enter}", "_Abschicken")
;~ Func _Abschicken()
;~ If GUICtrlGetHandle($NAbschicken) Then
;~
;~ MsgBox(0, "Abgeschickt", GUICtrlRead($Eingabe))
;~ EndIf
;~ EndFunc
while 1
$GuiMsg = GUIGetMsg()
Select
Case $GuiMsg = $GUI_EVENT_CLOSE
GUISetState(@sw_hide, $GuiClient)
Case $GUIMSG = $Anmelden
If $Verbunden = 0 Then
MsgBox(0, "Achtung!", "Bitte zuerst mit dem Server verbinden")
$serverip = InputBox("IP", "Server-IP eingeben:", "", "",250,75)
$verbunden = 1
EndIf
$ACCNEU = InputBox("Benutzername", "Wähle einen Benutzernamen:", @UserName,"",250, 75)
$PWACCNEU = InputBox("Passwort", "Wähle ein Passwort:", "","",250, 75)
$ACCNEUEM = InputBox("Email", "Gebe deine E-Mail Adresse ein (freiwillig):", "Keine Angabe","",300, 75)
TCPStartup()
$Connect = TCPConnect($serverip, 6221)
If @error =-1 Then
MsgBox(48, "FEHLER", "Beim Verbinden mit dem Server ist folgender Fehler aufgetreten:" & @error)
EndIf
TCPSend($Connect, "$ACCNEU|" & $ACCNEU & "|$PWACCNEU|" & $PWACCNEU & "|$ACCNEUEMAIL|" & $ACCNEUEM)
TCPStartup()
$MSocket = TCPListen($MIP, 6221, 9999)
If @error = -1 Then
MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
EndIf
$check = 0
While $check = 0
$SMsg = TCPAccept($Msocket)
If $SMsg <> -1 Then
While $Check = 0
$Msg = TCPRecv($SMsg, 9999)
If $Msg <> "" Then
MsgBox(0, "Account", $MSG)
$Check = 1
EndIf
WEnd
EndIf
WEnd
Case $GUIMSG = $Verbinden
$start = TimerInit()
$SERVERIP = GUICtrlRead($EIP)
TCPStartup()
$Connect = TCPConnect($ServerIp, 6221)
TCPSend($connect, "Verbindemich")
TCPStartup()
$MSocket = TCPListen($MIP, 6221, 9999)
If @error = -1 Then
MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
EndIf
$check = 0
While $check = 0
$SMsg = TCPAccept($Msocket)
If TimerDiff($start) >=10000 Then
MsgBox(0, "Timeout", "Server nicht erreichbar. Richtige IP? Server off?")
ExitLoop
EndIf
;~ If $SMsg <> -1 Then
While $Check = 0
$Msg = TCPRecv($SMsg, 9999)
If $Msg <> "" Then
MsgBox(0, "Verbinden", $Msg)
$Check = 1
$verbunden = 1
EndIf
WEnd
;~ EndIf
WEnd
Case $GUIMSG = $Einloggen
If $Verbunden = 0 Then
MsgBox(0, "Achtung!", "Bitte zuerst mit dem Server verbinden")
$serverip = InputBox("IP", "Server-IP eingeben:", "", "",250,75)
$verbunden = 1
EndIf
If $Verbunden = 1 Then
$Name1 = GUICtrlRead($Name)
$PW1 = GUICtrlRead($PW)
TCPStartup()
$Connect = TCPConnect($ServerIp, 6221)
$Daten = "Benutzername:" & $Name1 & ":Passwort:" & $PW1
TCPSend($Connect, $Daten)
TCPStartup()
$MSocket = TCPListen($MIP, 6221, 9999)
If @error = -1 Then
MsgBox(0, "Error", "Folgender Fehler ist aufgetreten:" & @error)
EndIf
$check = 0
While $check = 0
$SMsg = TCPAccept($Msocket)
;~ If $SMsg <> -1 Then
;~ While $Check = 0
$Msg = TCPRecv($SMsg, 9999)
If $Msg <> "" Then
MsgBox(0, "Einloggen", $MSG)
If $Msg = "Erfolgreich eingeloggt ;)" Then
GUICtrlSetState($Name, $GUI_hide)
GUICtrlSetState($PW, $GUI_hide)
GUICtrlSetState($Einloggen, $GUI_hide)
GUICtrlSetState($Anmelden, $GUI_hide)
GUICtrlSetState($Eip, $GUI_hide)
GUICtrlSetState($Verbinden, $GUI_hide)
GUICtrlSetState($Eingabe, $GUI_show)
GUICtrlSetState($Nabschicken, $GUI_hide)
GUICtrlSetState($Chatfenster, $GUI_hide)
GUICtrlSetState($Liste1, $GUI_show)
GUICtrlSetState($Ausloggen, $GUI_show)
GUICtrlSetState($Nabschicken, $GUI_show)
GUICtrlSetState($chatfenster, $GUI_show)
$Check = 1
EndIf
EndIf
;~ WEnd
;~ EndIf
WEnd
EndIf
Case $GUIMSG = $Ausloggen
TCPStartup()
$Connect = TCPConnect($ServerIp, 6221)
$sended = TCPSend($connect, "binwech8:"$Name1)
Sleep(1000)
Exit
EndSelect
$TrayMSG = TrayGetMsg()
If $TrayMSG = $Beenden Then
Exit
EndIf
If $TrayMsg = $Maximieren Then
GUISetState(@sw_show, $GuiCLient)
WinActivate("Client")
EndIf
WEnd
Viel Spaß
Aquaplant
PS: Ist noch nicht fertig - aber warum etwas beenden, dass nicht mal richtig funktioniert ![]()