• 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 :D ebenso sind kritiken erwünscht.

    hier der code:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <Misc.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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")

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Func List_Add($iName)
    GUICtrlSetData($An, $iName)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func List_Reload()
    GUICtrlSetData($An, "")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $Count - 2 Step 1

    GUICtrlSetData($An, $User[$i] & "|")

    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    For $i = 0 To $Count - 2 Step 1

    GUICtrlSetData($An, $User[$i])

    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func GUI_Delete()
    GUIDelete($Main_GUI)
    $Minimiert = True
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Connect()
    Info_Log("*** Server wird gesucht ***")
    $Socket = TCPConnect($Server_IP, $Server_Port)

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Func Beenden($message = "")
    If $message <> "" Then MsgBox(48,"Fehler",$message)
    TCPCloseSocket($Socket)
    TCPShutdown()
    Exit 0
    EndFunc

    [/autoit]

    grüße Moritz

  • Hi grundsätzlich ist es ein Server und Client Script. Es sucht zuerst ein bereits existierenden Server, wenn keine da ist erstellt es selber einen. Dies ist jedoch nicht die neuste version - mal schauen ob die die aktuellste mal hochlade, sie hat eine User liste mit der sich aussuchen kann wem man schreibt