Anzeigen aller Server



  • Hallo,
    Ich habe schonmal etwas zu diesem Thema gepostet. Allerdings habe ich es bis jetzt noch nicht hingebracht.

    Wie schon mal erwähnt habe ich ein sehr einfaches Spiel erstellt mit TclientSockt bzw TSeverSocket des BCB 6. Bisher muss ich immer die Ip-Adresse eingeben des Servers um das Spiel zu starten. Es wäre viel schöner wenn alle Server angezeigt würden und man dann einfach auswählen könnte.

    Als Antwort habe letztes mal bekommen von jansen:

    Denk dir ein bestimmtes Kommando aus, dass du an alle Rechner schickst.
    Wenn einer deiner Server dieses Kommando empfängt reagiert er mit einer bestimmten Antwort. Voilá, schon weisst du, auf welchen Rechnern dein Spiel läuft.

    Mein Problem ist nur ich weiß nicht wie ich das implementieren soll ?
    Wie kann ich an alle Rechner ein bestimmtes Kommando senden ?
    Wie geht das (beispiel)?

    Jedesmal wenn ich versuche einen Text an einen Server zu senden der nicht existiert kommt immer eine Standart-Exeption. Und da ich an viele NICHT-Existierende Server sende kommen auch demzufolge ziemlich viele.

    Ich weiß nicht wie man das implementiert. Könnt ihr mir bitte helfen. Danke.

    Ich habe es schon so versucht, aber ich glaube ich befinde mich auf einem schönen Holzweg ohne ENDE.

    void TForm1::suchen (void)
    {
      String ip;
      int ix, iy, iw, iz;
      ix = 192;
      iy = 168;
      iw = 0;
      iz = 0;
    
      ClientSocket1->Port = 5555;
    
      for(iz;iz<1000;iz++)  //Zähle bisher nur die letzt Stellen hoch
      {
        ip = (String)ix + "." + (String)iy + "." + (String)iw + "." + (String)iz;
    
        ClientSocket1->Address = ip;
    
        ClientSocket1->Open();
        ClientSocket1->Socket->SendText("Meine IP"); //Meine IP senden
      }
    }
    


  • Hi,
    auch ich hatte etwas zu deiner Frage geschrieben und soweit ich mich errinnere
    schrieb ich das Du ein Packet per UDP an die Broadcast Adresse deines Netzwerkes senden solltest.

    Du kannst die 255 am ende Deiner IP benutzen.

    Also in deinem Beispiel die 192.168.0.255.

    Ach übrigens 255 ist auch die höchste Zahl die in einer gültigen IP Adresse drinne ist also alles was > 255 ist eh ungültig und somit versuchst du in deiner Schleife bereits 745 ungültige IP Adressen "anzupingen".

    Beim BCB 6 müssten auch die NetMaster Komponenten bei sein.
    Falls ja, benutze die TNMUDP kompo.

    Beispiel:
    Packe eine Komponente in deine Form und nenne sie z:b UDP.
    Beim Server auch, der Localport des Servers sollte auf den Remotport des sendenden Clients eingestellt sein. Der Localport des Clients sollte != des Remoteports sein.

    /*Hier kannste ein Button oder sowas zum auslösen nehmen */
    {
        char *buf[20];
        strcpy(Buff, "\\status\\");
        Size = sizeof(Buff);
        lenght = strlen(Buff);
    
        UDP->RemoteHost = "192.168.0.255";
        UDP->RemotePort = 5555;
        UDP->LocalPort = 5500;
    
        UDP->SendBuffer(Buff,Size ,lenght );
    }
    
    /*
        Im OnDataReceive Ereignis der Kompo vom Server machste sowas
    */
    void __fastcall TForm1::DataReceive(TComponent *Sender,
          int NumberBytes, AnsiString FromIP, int Port)
    {
        if (NumberBytes>-1 && NumberBytes<2048)
        {
            char Buff[2048];
            int j;
            UDP->ReadBuffer(Buff, 2048, j);
            Buff[j]=0;
            if(strncmp(Buff, "\\Status\\", 8)==NULL)
            {
    /*  
    Abfrage empfangen in den Parametern : FromIp und Port stehen die Daten die Du 
    benötigts um mit deinem Server zu antworten Du schickst dann ein Packet zurück, da der Client auch die Daten hat von Wem er die Anwort erhält musste nicht die Adresse mitschicken, aber Du kannst z.B. den Servernamen, und den Port den der Client benötigt um sich am Serveranzumelden mitschicken und/oder ob ein Spiel läuft und ein Connect eventuell nicht möglich ist(ich weiss ja nicht wie dein Game aussieht).
    */
            }
        }
    }
    

    Beim Client machste dann etwas ähnliches, da es auch mehrere Server im Netz geben kann, könnte dein Client alle Server die antworten in ein Listview packen.

    Dies ist ein Beispielcode, ich garantiere nicht das alles funktioniert da ich ihn nicht selber getestet habe. Könnte also sein das ein paar schreibfehler drinne sind.



  • will_wissen schrieb:

    Ich habe schonmal etwas zu diesem Thema gepostet.

    Nachfragen zu einem Thema bitte immer im Original-Thread.


Anmelden zum Antworten