Chatprogramm für das Lokale Netzwerk

  • Der Chat den ich hier gemacht hab, hab ich eig. für die Schule gemacht, dass man mit einem anderen Chatten zu können.
    Wäre echt nett wenn ihr mir noch Verbesserungsmöglichkeiten sagen könntet oder Bugs melden.

    Ihr müsst das Programm an zwei PCs gestartet haben (Ihr könnt auch das Programm auch nur einmal öffnen und...) und dann bei jedem PC im Programm die IDs vom anderen PC eingeben ( ... einfach die eigene ID eingeben.) und dann auf "Verbindung herstellen..." drücken.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    Opt("MustDeclareVars", 1)

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

    #Region ### START Koda GUI section ### Form=C:\Users\Daniel\Desktop\2.kxf
    Global $GUI = GUICreate("LoKaL ChAt", 616, 516, -1, -1)
    Global $chat = GUICtrlCreateEdit("", 0, 104, 609, 305, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
    GUICtrlSetData(-1, "")
    Global $out = GUICtrlCreateEdit("", 0, 416, 537, 97, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
    GUICtrlSetData(-1, "")
    Global $senden = GUICtrlCreateButton("Senden", 544, 424, 65, 81, 0)
    GUICtrlCreateGroup("Partner Infos", 8, 8, 209, 89)
    GUICtrlCreateLabel("Name :", 24, 39, 47, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlCreateLabel("ID :", 24, 71, 23, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    Global $p_id = GUICtrlCreateInput("", 72, 63, 129, 24)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    Global $p_name = GUICtrlCreateInput("Verbindung getrennt...", 72, 31, 129, 24)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Eigene Infos", 224, 8, 209, 89)
    GUICtrlCreateLabel("ID :", 240, 72, 23, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlCreateLabel("Name :", 240, 40, 47, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    Global $e_name = GUICtrlCreateInput(@UserName, 288, 32, 129, 24)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    Global $e_id = GUICtrlCreateInput(@IPAddress1, 288, 64, 129, 24)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    Global $connect = GUICtrlCreateButton("Verbinung herstellen...", 440, 8, 169, 41)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUICtrlSetState($e_id, $GUI_DISABLE)
    GUICtrlSetState($p_name, $GUI_DISABLE)

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

    TCPStartup()
    Global $server = TCPListen(@IPAddress1, 4321)

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

    Global $chat_active = 0, $wait_time_nicksend = TimerInit()

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

    While 1
    If $chat_active = 1 Then
    If WinGetState ($GUI) = 15 Then
    If _IsPressed ("0D") Then
    If GUICtrlRead ($out) = "" Then
    Else
    While 1
    If Not _IsPressed ("0D") Then _Send()
    Sleep (20)
    WEnd
    EndIf
    EndIf
    EndIf
    If TimerDiff($wait_time_nicksend) > 1000 Then
    _TCPSend("#NICK# " & GUICtrlRead($e_name), GUICtrlRead($p_id), 4321)
    Global $wait_time_nicksend = TimerInit()
    EndIf
    EndIf

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

    Global $eingehende_nachricht = _TCPGetMessage($server)
    If Not $eingehende_nachricht = 0 Then
    Global $check = _CodeCheck($eingehende_nachricht)
    If $check[1] = 0 Then
    If $chat_active = 0 Then
    _TCPSend( "#ERROR# 0x001" , GUICtrlRead($p_id), 4321)
    Else
    GUICtrlSetData ( $chat , GUICtrlRead ($chat) & GUICtrlRead ($p_name) & " schrieb: " & $check[2] & @CRLF)
    EndIf
    ElseIf $check[1] = 2 Then
    GUICtrlSetData ( $p_name , $check[2] )
    ElseIf $check[1] = 1 Then
    MsgBox (0,"ERROR " & $check[2] , "Der Chatpartner hat die Verbindung noch nicht hergestellt.")
    EndIf
    EndIf

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _Chat ( "Off" )
    TCPShutdown()
    Exit

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

    Case $connect
    If $chat_active = 0 Then
    _Chat("On")
    Else
    _Chat("Off")
    EndIf

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

    Case $senden
    If $chat_active = 1 Then
    If GUICtrlRead($p_name) = "" Then
    MsgBox(0, "ERROR", "Der Chatpartener ist noch nicht erreichbar.")
    Else
    If Not GUICtrlRead($out) = "" Then
    Global $tcp_send = _TCPSend(GUICtrlRead($out), GUICtrlRead($p_id), 4321)
    If $tcp_send = 1 Then
    GUICtrlSetData($chat, GUICtrlRead($chat) & GUICtrlRead($e_name) & " schrieb: " & GUICtrlRead($out) & @CRLF)
    GUICtrlSetData($out, "")
    ElseIf $tcp_send = -1 Then
    MsgBox(0, "ERROR", "Chatapartner konnte nicht erreicht werden.")
    ElseIf $tcp_send = -2 Then
    MsgBox(0, "ERROR", "Die Nachricht konnte nicht übermittelt werden.")
    EndIf
    EndIf
    EndIf
    EndIf

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

    EndSwitch
    Sleep (20)
    WEnd

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

    Func _Send ()
    Global $tcp_send = _TCPSend ( GUICtrlRead ($out) , GUICtrlRead ($p_id) , 4321 )
    If $tcp_send = 1 Then
    GUICtrlSetData ($chat , GUICtrlRead ($chat) & GUICtrlRead ($e_name) & " schrieb: " & GUICtrlRead($out) & @CRLF)
    GUICtrlSetData ($out , "" )
    EndIf
    EndFunc

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

    Func _Chat($state)
    If $state = "On" Then
    If GUICtrlRead($e_name) = "" Or GUICtrlRead($p_id) = "" Then
    MsgBox(0, "Error", "Du musst alle Eingabefelder ausgefüllt haben.")
    Else
    $chat_active = 1
    GUICtrlSetData($connect, "Verbindung trennen...")
    GUICtrlSetState($e_name, $GUI_DISABLE)
    GUICtrlSetState($p_id, $GUI_DISABLE)
    EndIf
    ElseIf $state = "Off" Then
    _TCPSend ( "#NICK# Verbindung getrennt..." , GUICtrlRead ($p_id) , 4321 )
    GUICtrlSetData ($p_name , "Verbindung getrennt..." )
    $chat_active = 0
    GUICtrlSetData($connect, "Verbindung herstellen...")
    GUICtrlSetState($e_name, $GUI_ENABLE)
    GUICtrlSetState($p_id, $GUI_ENABLE)
    EndIf
    EndFunc ;==>_Chat

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

    Func _CodeCheck($string)
    Dim $back[3]
    If StringLeft($string, 7) = "#ERROR#" Then
    $back[1] = 1
    $back[2] = StringRight($string, 5)
    Return ($back)
    ElseIf StringLeft($string, 6) = "#NICK#" Then
    $back[1] = 2
    $back[2] = StringRight($string, StringLen($string) - 7)
    Return ($back)
    Else
    $back[1] = 0
    $back[2] = $string
    Return ($back)
    EndIf
    EndFunc ;==>_CodeCheck

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

    Func _TCPGetMessage($to_tcp_server)
    Local $tcp_accept = TCPAccept($to_tcp_server)
    If $tcp_accept <> -1 Then
    Local $message = TCPRecv($tcp_accept, 1024)
    Return ($message)
    TCPCloseSocket($tcp_accept)
    EndIf
    EndFunc ;==>_TCPGetMessage

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

    Func _TCPSend($message, $ip, $port)
    Local $tcp_connect = TCPConnect($ip, $port)
    If $tcp_connect = -1 Then
    Return (-1)
    Else
    Local $tcp_send = TCPSend($tcp_connect, $message)
    If $tcp_send = 0 Then
    Return (-2)
    Else
    Return (1)
    EndIf
    EndIf
    EndFunc ;==>_TCPSend

    [/autoit]

    !!! BITTE RÜCKMELDUNG !!!

    2 Mal editiert, zuletzt von Trainman (6. April 2010 um 18:12)

  • also kann man mit jedem beliebigen PC chatten? also eine andere ip adresse nicht die lokale?

  • also kann man mit jedem beliebigen PC chatten? also eine andere ip adresse nicht die lokale?

    Nein leider nicht. Das geht leider nur über das lokale netzwerk, also mit der lokalen IP.
    Doch wenn du das auch übers internet machen willst (was dann etwas aufwändiger) musst du bei dir und bei deinem Chatpartner den Port 4321 auf deinen PC umleiten und dann kannst du die internet IP verwenden ;)

  • glaub ja...
    weiss nix über verbindungen usw...

    früher dachte ich 127.0.0.1 is für Google ^^ :rofl:

  • bin jetzt nich zuhause, aber wenn ich es weiss, editiere ich es hier (dieser post :D )

  • ohh, sorry für so ein gerät kann ich dir leider nicht sagen wie man die Portum- oder weiterleitung funzt oder besser gesagt ob es sowas dort überhaupt gibt.
    also wenn du man in der konfiguration in dem gerät nachschaust (im browser die ip vom gerät also in der regel die standartgateway eingeben) kannst ja mal schaun obs dort was mit portumleitung gibt.

  • Cooler Script :)
    versuche zurzeit damit was zu machen, jedoch falls man manchmal bei der text eingabe ausvershen ENTER drück (während der verbindung!) fängt das tool an TOTAL zu spinnen !! hatt jemand ne idee bzw eine lösung dafür, bin auch zurziet am versuche aber schaff es nicht -.-'
    danke!

  • @ b0tnet


    Das Problem ist eben dass wenn der script keinen abnehmer der gesendeten nachrichten findet, dann schickt der sctipt die nachricht solange bis ihm schlecht wird.