Hi zusammen,
ich habe gestern ein Server Programm von mir wiedr gefunden und habe es auf den neusten Stand gebracht, es ist für das heimnetzwerk müsste aber eigentlich auch über inet funktionieren. Wenn ihr verbesserungsvorschläge habt dann immer her damit ebenso sind kritiken erwünscht.
hier der code:
Spoiler anzeigen
#include <Array.au3>
#include <Misc.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
Global $Server_IP = "127.0.0.1"
Global $Server_Port = 65432
Global $Socket
Global $Server
Global $IsHost = False
Global $Count = 1
Global $Verbindungen
Global $User
Global $Name = IniRead(@AppDataDir & "\config.ini","Optionen","Username",-1)
If $Name = -1 Then
$Name = InputBox("","Name?")
IniWrite(@AppDataDir & "\config.ini","Optionen","Username",$Name)
EndIf
If $Name = "" Then beenden("Fehler - Kein Name angegeben")
;$Name = "User" & Random(0,1000,1)
Global $Recv
Global $Font = "Arial"
Global $Minimiert = False
Global $Log_Text
Global Const $Retries = 0
[/autoit] [autoit][/autoit] [autoit]Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.
[/autoit] [autoit][/autoit] [autoit]$Tray_Maximieren = TrayCreateItem("Maximieren")
TrayCreateItem("")
$Tray_Exit = TrayCreateItem("Exit")
TraySetState()
[/autoit] [autoit][/autoit] [autoit]GUI_Create()
[/autoit] [autoit][/autoit] [autoit]TCPStartup()
[/autoit] [autoit][/autoit] [autoit]Connect() ; Versucht auf einen Existierenden Server zu connecten
[/autoit] [autoit][/autoit] [autoit]While True
If $IsHost Then
Pruefe_neue_Verbindung()
For $i = 0 To $Count-2 Step 1
$Recv = TCPRecv($Verbindungen[$i],1024)
If @error Then ; User verbindung unterbrochen
Info_Log("*** " & $User[$i] & " ist offline ***")
Local $iUser = $User[$i]
User_Del($i)
For $j = 0 To $Count-2 Step 1 ; Sendet dem neuen User alle anderen User daten
TCPSend($Verbindungen[$j], $User[$j] & "|userdel|" & $iUser)
Next
ExitLoop
Else
$Recv = StringSplit($Recv, "|")
If $Recv[0] = 3 Then
Switch $Recv[2]
Case "message"
If $Recv[1] = $Name Then
Info_Log($Recv[3])
If $Minimiert Then GUI_Create()
Else
Message($Recv[1], $Recv[3])
EndIf
EndSwitch
Else
If $User[$i] = "" Then
For $j = 0 To $count - 2 Step 1
If $Recv[1] = $User[$j] Then
TCPSend($Verbindungen[$i], $Recv[1] & "|rename|" & $Recv[1] & "|")
ExitLoop 2
EndIf
Next
Info_Log("*** " & $Recv[1] & " ist online ***")
List_Add($Recv[1])
$User[$i] = $Recv[1]
TCPSend($Verbindungen[$i], $User[$i] & "|useradd|" & $Name & "|")
For $j = 0 To $Count-3 Step 1 ; Sendet an alle User das ein neuer User hinzugekommen ist
TCPSend($Verbindungen[$j], $User[$j] & "|useradd|" & $Recv[1] & "|")
Next
For $j = 0 To $Count-3 Step 1 ; Sendet dem neuen User alle anderen User daten
TCPSend($Verbindungen[$i], $Recv[1] & "|useradd|" & $User[$j] & "|")
Next
EndIf
EndIf
EndIf
Next
Else
$Recv = TCPRecv($Socket,1024)
$Recv = StringSplit($Recv, "|")
If $Recv[0] >= 3 Then
For $i = 1 To $Recv[0]-1 Step 3
Switch $Recv[$i+1]
Case "message"
If $Recv[$i] = $Name Then
Info_Log($Recv[$i+2])
If $Minimiert Then GUI_Create()
Else
Message($Recv[$i],$Recv[$i+2])
EndIf
Case "useradd"
User_Add($Recv[$i+2])
Info_Log("*** " & $Recv[$i+2] & " ist online ***")
Case "userdel"
User_Del($Recv[$i+2])
Info_Log("*** " & $Recv[$i+2] & " ist offline ***")
Case "rename"
$Name = InputBox("Umbenennen","Ihr Name (" & $Name & ") wird schon vergeben, wählen sie einen anderen!")
If @error Then Beenden()
TCPSend($Socket, $Name)
EndSwitch
Next
EndIf
EndIf
Switch GUIGetMsg()
Case $Send
Local $read = GUICtrlRead($Text)
If $read <> "" Then
Message(GUICtrlRead($An), $Name & " " & @HOUR & ":" & @MIN & ": " & $read)
GUICtrlSetData($Text,"")
EndIf
Case -3
Beenden()
Case -4
GUI_Delete()
EndSwitch
If _IsPressed("0D") Then
Local $read = GUICtrlRead($Text)
If $read <> "" Then
Message(GUICtrlRead($An), $Name & " " & @HOUR & ":" & @MIN & ": " & $read)
GUICtrlSetData($Text,"")
EndIf
EndIf
Switch TrayGetMsg()
Case $Tray_Maximieren
If $Minimiert Then GUI_Create()
Case $Tray_Exit
Beenden()
EndSwitch
WEnd
Func Pruefe_neue_Verbindung()
Local $Neue_Verbindung = TCPAccept($Server)
If $Neue_Verbindung <> -1 Then
If IsArray($User) Then
ReDim $User[$Count]
Else
Dim $User[$Count]
EndIf
If IsArray($Verbindungen) Then
ReDim $Verbindungen[$Count]
Else
Dim $Verbindungen[$Count]
EndIf
$Verbindungen[$Count-1] = $Neue_Verbindung
$Count += 1
EndIf
EndFunc
Func User_Add($iName)
If IsArray($User) Then
ReDim $User[$Count]
Else
Dim $User[$Count]
EndIf
$User[$Count-1] = $iName
$Count += 1
List_Add($iName)
Return 1
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit]Func User_Del($iNameOrID)
If IsString($iNameOrID) Then
For $i = 1 To $Count - 2 Step 1
If $User[$i] = $iNameOrID Then
_ArrayDelete($User,$i)
_ArrayDelete($Verbindungen,$i)
$Count -= 1
ExitLoop
EndIf
Next
ElseIf IsNumber($iNameOrID) Then
_ArrayDelete($User,$iNameOrID)
_ArrayDelete($Verbindungen,$iNameOrID)
$Count -= 1
Else
Beenden("Fehler - In User_Del Funktion, falscher Parameter")
EndIf
List_Reload()
Return 1
EndFunc
Func List_Add($iName)
GUICtrlSetData($An, $iName)
EndFunc
Func List_Reload()
GUICtrlSetData($An, "")
For $i = 0 To $Count - 2 Step 1
GUICtrlSetData($An, $User[$i] & "|")
Next
EndFunc
Func Message($An1,$Text1)
$string = $An1 & "|message|" & $Text1
If $IsHost Then
For $i = 0 To $Count-2 Step 1
If $User[$i] = $An1 Then
TCPSend($Verbindungen[$i], $string)
ExitLoop
EndIf
Next
Else
TCPSend($Socket, $string)
EndIf
EndFunc
Func GUI_Create()
Global $Main_Gui = GUICreate("Home Chat",420,300)
GUICtrlCreatePic("hintergrund.jpg", 0, 0, 640, 400)
GUICtrlSetState(-1, 128)
Global $Log = GUICtrlCreateEdit($Log_Text,10,40,400,170, BitOR($ES_AUTOVSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_VSCROLL))
GUICtrlSetBkColor(-1, 0xFFFFFF) ;Transparent
;GUICtrlSetColor (-1,0x0)
GUICtrlSetFont(-1, 14, 400, 0, $Font)
Global $Text = GUICtrlCreateEdit("",10,220,300,70,0x0040 + 0x00200000)
GUICtrlSetBkColor(-1, 0xFFFFFF) ;Transparent
;GUICtrlSetColor (-1,0x0)
GUICtrlSetFont(-1, 14, 400, 0, $Font)
;Global $An = GUICtrlCreateInput("",345,220,55,20)
Global $An = GUICtrlCreateList("", 320,220,80,50,0x00200000) ; $WS_VSCROLL
GUICtrlSetLimit(-1, 200)
GUICtrlSetBkColor(-1, 0xFFFFFF) ;Transparent
;GUICtrlSetColor (-1,0x0)
Global $Send = GUICtrlCreateButton("Send",320,270,80,20)
GUICtrlSetBkColor(-1, 0xFFFFFF) ;Transparent
GUICtrlSetColor (-1,0x0000FF)
GUICtrlSetFont(-1, 10, 400, 0, $Font)
GUICtrlCreateLabel($Name,10,10,400,25)
GUICtrlSetBkColor(-1, -2) ;Transparent
GUICtrlSetColor (-1,0xFFFFFF)
GUICtrlSetFont(-1, 18, 400, 0, $Font)
GUISetState()
For $i = 0 To $Count - 2 Step 1
GUICtrlSetData($An, $User[$i])
Next
EndFunc
Func GUI_Delete()
GUIDelete($Main_GUI)
$Minimiert = True
EndFunc
Func Info_Log($Text)
$Log_Text = GUICtrlRead($Log) & @CRLF & $Text
If $text = "cls" Then
GUICtrlSetData($Log,"")
Else
GUICtrlSetData($Log, $Log_Text)
Local $Lines = _GUICtrlEdit_GetLineCount($Log)
_GUICtrlEdit_LineScroll($Log, 0, $Lines)
EndIf
EndFunc
Func Connect()
Info_Log("*** Server wird gesucht ***")
$Socket = TCPConnect($Server_IP, $Server_Port)
If $Socket = -1 Then
For $i = 1 To $Retries Step 1
Sleep(500)
Info_Log("cls")
Info_Log("*** Server wird gesucht - Versuch: " & $i & " ***")
$Socket = TCPConnect($Server_IP, $Server_Port)
If $Socket <> -1 Then
TCPSend($Socket, $Name)
Info_Log("cls")
Info_Log("Server wurde gefunden - " & $Server_IP)
ExitLoop
EndIf
Next
$IsHost = True
$Server = TCPListen($Server_IP, 65432, 128)
If $Server = -1 Then Beenden("Ein Fehler ist aufgetreten - Es konnte kein Server erstellt werden")
Info_Log("cls")
Info_Log("*** Server wurde erstellt - " & $Server_IP & " ***")
Return 1
Else
TCPSend($Socket, $Name)
Info_Log("cls")
Info_Log("*** Server wurde gefunden - " & $Server_IP & " ***")
Return 1
EndIf
EndFunc
Func Beenden($message = "")
If $message <> "" Then MsgBox(48,"Fehler",$message)
TCPCloseSocket($Socket)
TCPShutdown()
Exit 0
EndFunc
grüße Moritz