Hilfe Auto IT TCP Chat

  • Ach ja, hänge mal wieder. Hab mir diesen Chat mal zu Gemüte geführt und verzweifle grad mal daran.

    Spoiler anzeigen

    Quelltext hier: Beitrag 1

    Solange ich im lokalen Netzwerk bleibe funktioniert alles wunderbar. Sobald ich aber externe Ip´s verwende funktioniert gar nix mehr. Sitze hinter einer FritzBox 7170. Firewalls etc. deaktiviert usw hab ich durch.
    Die externe IP für den Server hol ich mir über _GetIP().

    Kann mich da bitte mal einer auf den rechten Weg führen. Is doch bald Weihnachten ;)

    LG
    MrB

    4 Mal editiert, zuletzt von MrB (25. Dezember 2011 um 18:26)

  • Abend, Port forwarding Aktiviert? ist denn dein Rechner aus dem Internet aus erreichbar? also schonmal geschaut zb Ping.eu oder so und dann versucht deinen Router zu erreichen?

    Gruß Marvin

  • ja du musst in deiner fritzbox ienstellen dsa er alles was auf dem chat port ankommt an deinr echner weiterleitet.

  • Ich habe ein ähnliches Problem, wie der Threadersteller.
    Man spricht zwar immer von Port-Forwarding, aber was genau das ist und wie das geht, wird einem nie erklärt.
    Ich finde, jemand der Ahnung hat, sollte mal eine anschauliche Anleitung dafür machen.
    Es würde vielen Usern helfen... :D

  • Naja, ist schon ein bisschen kompliziert, da das bei fast jedem Router komplett anders ist. Natürlich nicht die Bedeutung, sondern nur das vorgehen.
    Man kann fast nur speziell auf denjenigen eingehen der die Probleme hat.

    Nachdem ich die FBen jetzt mal neu gestartet habe geht´s auch plötzlich. Gott weis warum !

    Wenn du mal dein Router Modell sagst und es nicht zu außergewöhnlich ist, kann ich dir bestimmt helfen. Wegen mir auch las PN

    LG
    MrB

    P.S.: Nervt nur ein wenig, dass jeder die Ports freigeben muss. Mal sehen ...

  • wenn du etwas durchgeguckt hättest, hättest du festgestellt das ich das selbe problem hatte und gelöst habe!

    die UDF von kip kommt nicht damit klar wenn es etwas länger dauert.

    bedeutet:
    du musst eine warteschleife einbauen die erst dann unterbrochen wird sobald die verbindung wirklich hergestellt ist.

  • SgtIgram

    Hmm, was soll ich dazu sagen. Um es mal in deiner Art und Weise auszudrücken :

    Hättest du mal alles gelesen, hättest du auch bemerkt, dass ich das Problem schon gelöst hatte und das es gar nicht an der Warteschleife liegt. Diese hatte ich nämlich schon eingebaut, da ich dein Problem/Thread sehr wohl gefunden hatte. Da es nur einfach nicht darum ging habe ich es nicht erwähnt.

    Da ich den Thread auch schon vor deiner Antwort auf gelöst gesetzt hatte, versteh ich das ganze sowieso nicht. Na egal !!

    CLOSED

    Einmal editiert, zuletzt von MrB (24. Dezember 2011 um 12:26)

  • Hmm, doch nochmal ein Problem.

    Hab soweit alles hinbekommen. Chat läuft mit internen wie externen Ip´s. Daten können gesendet werden und werden nun auch bei den einzelnen Clients angezeigt. Das Problem ist nur, dass der Name des Absender der Nachricht immer derjenige ist der grad am Client angemeldet ist.

    Bsp.: Ich logg mich mit User1 beim Server ein. Klappt ! User2,User3 und User4 sind schon da
    Ich scheib was und bei meinem Client erscheint
    [12:00:00] User1: test

    Bei allen anderen erscheint jeweils deren Login Namen also
    [12:00:00] User2: test
    [12:00:00] User3: test
    [12:00:00] User4: test

    Finde irgendwie nicht den Fehler. Muss aber auch zugeben, dass ich da nicht zu 100% durchsteige

    LG
    MrB

    P.S.: Und zur Sicherheit: Allen schonmal schöne Feiertage !

  • ohne dein code kann man dir schwer helfen, aufjeden fall stimmt bei deiner text ausgabe funktion die Stelle nicht bei der du den Namen ausgibst. Dort musst eben schauen auf welchem Socket die Nachricht angekommen ist(jeder user hat ja eigenen Socket aufem Server) und dann Socket mit Name verbinden und somit hast du dann den dazugehörigen namen.. ^^ Bist jetzt hast du wohl immer den namen drin, dem du die Nachricht zushcickst, also

    client 1 sendet an server,
    server schickt nachricht "client2: *nachricht*" an client2
    server shcickt nachricht "client3: *nachricht* an client3 ...

    aber du musst als absende namen den client eintragen, von dem die nachricht anfangs gekommen ist^^

  • @Death

    Da muss ich dir Recht geben. Wenn man nicht Zitieren kann und sich das was man macht noch nicht mal anschaut ist das schon blöd ! Da muss ich demnächst mal drauf achten ;)

    Quelltext hier: Beitrag 1

    P.S.: Wenn ich alles richtig verstanden habe, wird der Nickname gar nicht mitgesendet und auch nicht auf den UserArray zugegriffen usw. sondern einfach der lokale Nick genommen. Bitte korrigieren falls falsch

    So, man muss die Funktionen _Try2Send() und _Received($hClient, $sReceived, $iError) im Client so anpassen, dass der Nick mit übermittelt wird

    Spoiler anzeigen
    [autoit]


    Func _Received($hClient, $sReceived, $iError)
    $sReceived = _FormatRecieved($sReceived)
    If $sReceived[0] = 'Connected' Then
    _Connected()
    ElseIf $sReceived[0] = 'userArray' Then
    _userArrayUpdate($sReceived[1])
    ElseIf $sReceived[0] = 'chat' Then
    _Chatbox_SetData($Chat, "[b][" & _NowTime() & "] " & $sReceived[1], 0x68838B) ; Hier anpassen
    ;~ _Chatbox_SetData($Chat, "[b][" & _NowTime() & "] " & $NickName & ': ' & $sReceived[1], 0x68838B)
    EndIf
    EndFunc ;==>_Received

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

    Func _Try2Send()
    If GUICtrlRead($ChatInput) <> '' Then
    _TCP_Send($hClient, 'chat~' & $NickName & ": " & GUICtrlRead($ChatInput)) ; Hier anpassen
    GUICtrlSetData($ChatInput, '')
    EndIf
    EndFunc ;==>_Try2Send

    [/autoit]

    So funktioniert es zumindestens bis jetzt mal ohne Fehler

    3 Mal editiert, zuletzt von MrB (24. Dezember 2011 um 13:37)