TserverSocket + TclientSocket - Frage



  • Guten morgen,

    ich gehe direkt zum Problem über, unzwar folgendes:

    Aufgebaut ist eine Server-Client Socket Verbindung mittels der TServerSocket-TClientSocket packages, nun zur meiner Frage:
    besteht die Möglichkeit direkt einen bestimmten Client anzuwählen und zb per Text zu kommunizieren?

    per:

    int Verbindungen = ServerSocket2->Socket->ActiveConnections;
    for(int x = 0; x <= Verbindungen - 1; x++)
      ServerSocket2->Socket->Connections[x]->SendText("Hello Client");
    

    funktioniert es soweit, jedoch bekommt jeder einzelne Client alles mit.
    Würde gerne auch das so programmieren wollen, dass die möglichkeit besteht zwischen Client und Server eine "private" Verbindung besteht.

    In wie fern ist das möglich und hättet ihr vllt paar Lösungsansätze?

    Vielen Dank euer inek68



  • hmm, ich sehe gerade das Problem nicht.
    Wenn der Server bsp. nur dem ersten Client etwas senden soll, dann verwende halt

    ServerSocket2->Socket->Connections[0]->SendText("Hello Client");
    

    oder war das jetzt zu simpel gedacht 😕



  • Du musst Dir einfach irgendwo speichern, welcher Client welche IP-Adresse besitzt und kannst dann mit TServerSocket::Socket::RemoteAdress die gesuchte Connection auswählen.



  • Vielen Dank für die Antworten!.

    Sorry falls ich zu viel Frage oder vllt auch zu dumm, aber komme gerade nicht dahinter.

    Wenn ich die RemoteAdress von dem Client gespeichert habe, wie sieht der Befehl für den Textversand aus?

    lg inek68



  • na genauso wie vorher, nur dass Du dann die entsprechende Connection raussuchst.

    ServerSocket2->Socket->Connections[spezifischerClient]->SendText("Hello Client");
    


  • ich bekomms einfach nicht hin...

    folgendes habe ich versucht:

    die Remote-Adressen der Clients haben ich vorerst nicht gespeichert, wollte es an einem Bsp mal versuchen:

    AnsiString k= "80.133.01.144" ;
      ServerSocket2->Socket->Connections[StrToInt(k)]->SendText(Username +"erfolgreich ausgelogt");
    

    folgende Fehlermeldung:

    http://www.abload.de/img/unbenannt-3o2bf.jpg

    Sorry 😞

    liebe grüße inek68



  • Hallo

    Nein das geht so nicht. Das Array Connections verlangt den Index des Clients, nicht desen IP. Du must zuerst aus der IP den Index bestimmen. Wenn du nichts weiter als die IP hast, must du mit einer Schleife erstmal den Client suchen.

    int Verbindungen = ServerSocket2->Socket->ActiveConnections;
    int index = -1;
    AnsiString k= "80.133.01.144" ;
    for(int x = 0; x < Verbindungen; x++)
    {
      if (ServerSocket2->Socket->Connections[x]->RemoteAddress == k)	
        index = x;
    }
    if (index == -1)
    {
      // Adresse nicht vorhanden
      return;
    }
    ServerSocket2->Socket->Connection[index]->SendText(Username +"erfolgreich ausgelogt");
    

    Besser ist es natürlich, gar nicht IP-Adressen zur Identifizierung zu verwenden, sondern gleich zum passenden Kontext den jeweils zugehörigen Zeiger auf das TCustomWinSocket-Element zwischenzuspeichern. Das erfordert natürlich eine Verbesserung deines Programmkonzepts.

    bis bald
    akari


Anmelden zum Antworten