Multiplayer - TCP IP ohne Fehler-Rückmeldung WTF?

    • GM 8

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Multiplayer - TCP IP ohne Fehler-Rückmeldung WTF?

      Moinmoin,

      ich sitz grad an einem Chatprogramm ... whatever.
      Und zwar völlig ohne Erweiterungen wie z.B. 39DLL.
      Ich will auch nicht rumheulen warum keine Online Internet Verbindung so einfach möglich ist.
      Dieses Thema wurde mehr als nur genug oft angesprochen und festgestellt.
      (Ich verwende vorerst keine Erweiterung, da meine eine Lösung gefunden zu haben wie ich mit den Bordeigenen Mitteln eine online Internet Verbindung aufbauen kann. ... Muss ich erstmal testen).

      Mein Anliegen ist ein Anderer:
      Der Game Maker gibt mir keine Rückmeldung bzw. irgnoriert falsche Adresse.
      Ich bin mir fast sicher das er bei einer fehlerhaften IP bzw. Adresse nicht verbunden hat.
      Aber plötzlich ignoriert er das und verbindet (vermutlich) dann local.
      Und zwar gehe ich wie folgt vor:

      Quellcode

      1. // Example
      2. ip = get_string('IP?',ip); // mask: '123.123.123.12:12'
      3. mplay_init_tcpip(ip);
      4. status = mplay_connect_status(); // return 2 when connected with tcp ip
      5. if (status == 0) {exit;}


      Egal was für eine Adresse ich jetzt eingebe, er verbindet feucht fröhlich und erstellt sogar ein Charroom erfolgreich (nicht im oberen Code sichtbar).
      Zum Beispiel die Adresse 123.123.123.12 nimmt er an. Oder auch jedes andere Wort z.B. "Papa Schlumpf".
      Dabei sollte eigentlich nur ein leerer String zu einer local Verbindung führen (laut Helpfile).
      Ich hatte auch schonmal das ne Verbindung nicht hergestellt werden konnte. Das war aber schon länger her.

      Das Problem hierbei ist ganz einfach:
      Ich kann nun nicht feststellen ob die gewünschte Verbindung funktioniert hat.

      PS : Könnte man evtl. anders herausfinden ob man nun nur local verbunden ist?
      >>> Dies soll eine Signatur darstellen und ebenso den Zweck entfremden wie so oft in Foren. Dieser wäre den Leser über eine Kontaktaufnahme zu informieren. In der Paxis wird dieser aber verwendet um so halbwitzige bis überhaupt nicht komische Kommentare wie dieser zu verbreiten. Immerhin frisst dieser Signatur ausnahmsweise kein großen Platz weg.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DGML ()

    • Die Funktion mplay_connect_status gibt einfach nicht zurück, ob die Verbindung erfolgreich herstellt worden ist, sondern lediglich welcher Verbindungstyp gerade verwendet wird.
      Ob die Verbindung erfolgreich war, lässt sich ganz einfach mit dem boolschen Rückgabewert der Funktion mplay_init_tcpip überprüfen:

      GML-Quellcode

      1. ip = get_string("Please enter the IP:", "");
      2. if (mplay_init_tcpip(ip)) {
      3. show_message("Connection successful!");
      4. } else {
      5. show_message("Connection failed!");
      6. }
    • Das wusste ich bereits. Aber danke. (wirklich :) )
      Die Status Funktion liefert aber auch ne 0 zurück, wenn keine Verbindung stattfand.

      Mein Problem besteht darin das er ja eine Verbindung herstellt. (Rückgabewert 1).
      Egal was ich da eingebe. (Beispiele meiner Eingaben möchte ich aus Jungenschutz hier nicht nennen. ^^ )
      Ich denke einfach das er dann eine locale Verbindung aufbaut. So rein logisch gedacht.
      Aber das er nicht mal die Eier besitzt mir zu sagen das meine gewünschte Verbindung fehlgeschlagen hat, finde ich seltsam.
      >>> Dies soll eine Signatur darstellen und ebenso den Zweck entfremden wie so oft in Foren. Dieser wäre den Leser über eine Kontaktaufnahme zu informieren. In der Paxis wird dieser aber verwendet um so halbwitzige bis überhaupt nicht komische Kommentare wie dieser zu verbreiten. Immerhin frisst dieser Signatur ausnahmsweise kein großen Platz weg.
    • Ach - ich hab mich wohl etwas verdacht. Du willst wissen ob hinter der eingegebenen IP Adresse auch ein gültiger Client/Server steckt, oder?
      Am verlässlichsten wär es einfach eine Nachricht mit einem Verfizierungscode von dem Client/Server der anderen Seite zu "echoen" lassen. Nun einfach warten (Timeout nicht vergessen!) ob die Nachricht richtig, falsch oder erst garnicht zurückgesendet wurde.
    • @henrik1235:
      Ideeansatz = nicht schlecht. :)
      Aber wie willst du rausfinden ob die Adresse oder IP existiert?
      Und ob letztendlich der Game Maker damit verbinden konnte. ;)

      @All:
      Ok schlussendlich merk ich sowieso das die "gewünschte" Verbingung nicht läuft. Da ich dann der einzige im Chat bin. ^^
      >>> Dies soll eine Signatur darstellen und ebenso den Zweck entfremden wie so oft in Foren. Dieser wäre den Leser über eine Kontaktaufnahme zu informieren. In der Paxis wird dieser aber verwendet um so halbwitzige bis überhaupt nicht komische Kommentare wie dieser zu verbreiten. Immerhin frisst dieser Signatur ausnahmsweise kein großen Platz weg.
    • Arbeite gerade an einem Skript das erkennt ob die IP eine IPv4-Addresse ist.
      #edit:

      GML-Quellcode

      1. /*isIP-Address(IP)
      2. IP: Die Addresse
      3. Rückgabewert: true/false
      4. Nur IPv4
      5. (by henrik1235)
      6. */
      7. var _str,_t;
      8. _str=argument0;
      9. if (_str=="") { //lokale IP
      10. return true;
      11. }
      12. if (string_count(".",_str)!=3) {
      13. return false;
      14. }
      15. repeat(3) {
      16. _t=string_copy(_str,1,string_pos(".",_str)-1);
      17. _str=string_delete(_str,1,string_pos(".",_str));
      18. if (string_digits(_t)!=_t) { //keine Nummer
      19. return false;
      20. }
      21. }
      22. if (string_count(":",_str)!=0) {
      23. _t=string_copy(_str,1,string_pos(":",_str)-1);
      24. if (string_digits(_t)!=_t) { //keine Nummer
      25. return false;
      26. }
      27. }
      28. else {
      29. if (string_digits(_str)!=_str) {
      30. return false;
      31. }
      32. }
      33. //Port
      34. if (string_char_at(_str,1)==":") {
      35. _str=string_delete(_str,1,1);
      36. if (string_digits(_str)!=_str) {
      37. return false;
      38. }
      39. }
      40. return true;
      Alles anzeigen
      wupto.net/ Nicht meine Seite!
      We love Koalas.

      GM-D-Spam-o-Meter: 32%
    • @henrik1235: String Filter ist relativ einfach. Ändert, so gut du es auch meinst, nichts an meinem Problem. Dennoch danke für dein Ansatz. Besser spontane Ansätze einzubringen und zu Lösungen führen als zu schweigen. Daher: Danke. :)
      >>> Dies soll eine Signatur darstellen und ebenso den Zweck entfremden wie so oft in Foren. Dieser wäre den Leser über eine Kontaktaufnahme zu informieren. In der Paxis wird dieser aber verwendet um so halbwitzige bis überhaupt nicht komische Kommentare wie dieser zu verbreiten. Immerhin frisst dieser Signatur ausnahmsweise kein großen Platz weg.
    • Ich glaube die Funktion mplay_init_tcpip funktioniert anders als du es dir vorstellst. In der Hilfe heißt es zu dieser Funktion

      initializes a TCP/IP connection

      was soviel heißt, dass du damit lediglich TCP/IP als Verbindungsprotokoll festlegst. Die IP, die du dort angibst, wird vermutlich erstmal intern gespeichert, hat aber an dieser Stelle noch keine Auswirkung. Mit mplay_init_tcpip wird also meines Wissens nach erstmal noch keine Verbindung hergestellt. Dies geschieht erst, nachdem ein Spieler mit mplay_session_create eine Session erstellt hat und ein anderer dieser mit mplay_session_join beitritt. Ob die zu Beginn angegebene IP-Adresse richtig ist, müsste man also mittels mplay_session_find erfahren, welche die Anzahl verfügbarer Sessions zurückgibt. Gibt diese Funktion 0 zurück, so ist entweder die IP falsch oder alle Sessions sind voll.

      Ist schon etwas länger her, dass ich mit den mplay-Funktionen zu tun hatte. Bin mir daher nicht ganz sicher, ob das so stimmt.
    • Ok, das ist klar. Dass wenn die Verbindung nicht da herauskommt wo sie sein sollte gibts keine Chatpartner. (Mein Script sucht nach einem Raum und erstellt einen falls es keinen gibt. Das erfährt man aber.)
      (Eigenes)
      Ok schlussendlich merk ich sowieso das die "gewünschte" Verbingung nicht läuft. Da ich dann der einzige im Chat bin.
      Ich bin mir zu 90% sicher das ich früher (vor ein paar Tagen/Wochen) noch eine Fehlermeldung bekam, falls die Adresse nicht stimmt.
      Ich meine jetzt auch das er nichtmal bei einer richtigen Eingabe zu diesem Verbindet.
      ... whatever.

      Ich befürchte fast doch auf einer dll (in dem fall 39dll) zurückzugreifen.
      Naja, bin zwar noch nicht so standfest in diesen Dingen. Und mags nicht gern, aber da muss ich wohl durch.
      Hat jemand erfahrungen mit der 39dll? Mein Antivirus schlug da sogar mal Alarm. :/
      Gibts evtl. Alternativen? z.B. auf direkte Windows interne DLLs aufrufen?
      Ich meine da gibts ja auch ein Source Code davon, ne? Evtl. kann ich sie ja umbaun bzw. daraus meine eigenen bauen.
      Jetzt komm ich dochnochmal auf das alte Drama zurück: ^^
      Warum beherrscht der Game Maker eine Internetverbindung nicht, obwohl es laut dem Hersteller erlauben sollte.
      Hab schon alle Direct Play Ports, sowie Ports die Firefox verwendet etc. Mittels (TCP Viewer ermittelt).
      >>> Dies soll eine Signatur darstellen und ebenso den Zweck entfremden wie so oft in Foren. Dieser wäre den Leser über eine Kontaktaufnahme zu informieren. In der Paxis wird dieser aber verwendet um so halbwitzige bis überhaupt nicht komische Kommentare wie dieser zu verbreiten. Immerhin frisst dieser Signatur ausnahmsweise kein großen Platz weg.