Im TServerSocket einzelne Clients disconnecten?



  • Hi

    ich habe einen TServerSocket!

    Ich möchte aber das wenn der 11 Client (oder höher) connectet der Server ihm nen anderen server nennt und den client dann disconnectet!
    Damit jeder Server max 10 User hat!

    Wie lässt sich das realisieren?

    Ich weis ich könnte dem client sagen er soll sich disconnecten aber das wäre dann ja ein schwachpunkt der software weil wenn der das nicht macht dann hat der server auf dauer ein problem!

    THX

    Dagsta

    Edit:

    Habe jetzt was gefunden:

    void __fastcall TForm1::ServerSocketClientRead(TObject *Sender, 
          TCustomWinSocket *Socket) 
    { 
        ServerSocket1->Socket->Connections[i]->Disconnect(Socket->SocketHandle); 
    }
    

    habe es noch nicht ausprobier weil gerade auf der arbeit aber wo ist die variable i her?

    muss ja irgentwo übergeben werden oder so das kann ich noch nicht so ganz nachvollziehen!

    THX

    Dagsta



  • Das is n Stück ausm ganzen Quelltext...

    Und wieso willste dem Client sagen er soll Disconnecten wieso Disconnectest du nich einfach vom Server aus wie in dem Beispiel beschrieben?

    Versteh nich so ganz wo das Problem liegt.

    Nen Blick in die Hilfe unter TServerSocket und die Methoden und Eigenschaften könnte sicher auch nicht schaden...

    BTW wenn du nicht weißt was das i da bedeuten soll solltest du dich vielleicht mal mit C++ allgeimein n bischen mehr beschäftigen 😉



  • aaaabyx schrieb:

    <Edit: Zitate auf das Notwendigste beschränken. Danke!>

    Wenn du meinen Text gelesen hättest wüsstest du das ich ja vom server aus die clients disconneten möchte!

    Bezüglich des "i" würde ich so sagen eine variable! nur weis ich nicht woher die kommt! wenn dem nicht so ist kläre mich doch bitte auf



  • Ich hab deinen Text durchaus gelesen.
    Da hast du eben geschrieben du könntest den Client auffordern sich zu disconnecten. Wozu das denn? Disconnecte doch einfach vom Server aus, wie das geht steht doch da in dem Codeschnipsel von dir...
    Das i is vermutlich ne Variable ja, darauf war das aber eher nich bezogen. Das i könnte z.B. in deinem Beispiel die Nummer der Verbindung darstellen, die getrennt werden soll. Tja jetzt musst du nur noch rausfinden ob es bei TServerSocket irgendein Event z.B. mit Namen OnConnect (?) gibt. Dann überprüfst du halt wie viele Verbindungen schon bestehen und Disconnectest dann wieder.

    Wenn ich irgendwas falsch verstanden/falsch realisiert hab klär mich bitte drüber auf...



  • aaaabyx schrieb:

    <Edit: Zitate auf das Notwendigste beschränken. Danke!>

    Also ich hatte ja geschrieben das ich die clients vom server aus disconnecten möchte nur nicht weis wie und die lösung bei der ich wüsste wie es geht die vom client disconnecten ist damit das nicht nochmal jemand schreibt ich solle es doch einfach so machen

    dann habe ich den code ergänzt und das soll so funktionieren ist ja das onClientRead ereigniss

    Das i den einzelnen client identifiziert war mir klar meine frage war nur woher i kommt weils ja nicht übergeben wurde!



  • Kann dann wohl nur ne Globale Variable sein...

    So und was genau willst du jetzt noch wissen bzw. was hast du schon?



  • Ich sag euch was das ist 😉

    void __fastcall TForm1::ServerSocketClientRead(TObject *Sender, 
          TCustomWinSocket *Socket) 
    { 
       for(int i = 0; i<Server->Socket->ActiveConnections; i++)
       {
          if(ServerSocket1->Socket->Connections[i]->SocketHandle == Socket->SocketHandle)
             ServerSocket1->Socket->Connections[i]->Disconnect(Socket->SocketHandle);
       }
    }
    


  • Hmm... so löscht man alle Verbindungen... er meint aber es dürfen max. 10 sein, also mach das hier:

    void __fastcall TForm1::ServerSocketClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
       for(int i = 10; i<Server->Socket->ActiveConnections; ++i)
             ServerSocket1->Socket->Connections[i]->Disconnect(Socket->SocketHandle);
    }
    

    Damit trennt er alle Verindungen, die einen größeren Index als 9 haben, in Klartext: Es sind absofort nurnoch 10 Verbindungen möglich.



  • Super damit habt ihr gerade mal wieder verhindert dass er Gelegenheit hat das selber zu machen und somit was lernt.



  • Was mir grade noch einfällt. Gabs da nicht auch noch sowas wie MaxConnections im OI?


Anmelden zum Antworten