TServerSocket - Wie komme ich an das korrekte Handel um Daten auszulesen



  • folgender code, allerdings enhält sHdl nicht das Handle des Sockets vondem die Daten kommen... ich hab schon in der Hilfe geschaut aber ich finde einfach nicht das Richtige.

    void __fastcall TForm1::ServSockClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
        AnsiString tmp;
        int i;
        int aCons = 0;
        int sHdl  = 0;
    
        aCons = ServSock->Socket->ActiveConnections;
        sHdl  = ServSock->Socket->SocketHandle;
    
        if( aCons > 0 )
        {
            for( i = 0; i<aCons; i++ )
            {
                if( ServSock->Socket->Connections[i]->SocketHandle == sHdl )
                {
                 ...
    


  • chickonspeed schrieb:

    //ServSock->Socket->SocketHandle ist das EIGENE Handle
        sHdl  = ServSock->Socket->SocketHandle;
        //Das ist das Handle eines mit dir verbundenen CLIENTS
        ServSock->Socket->Connections[i]->SocketHandle
    

    also wird das nix. 😉

    Was hast du denn genau vor?

    Edit:

    Wenn du daten von einem Client lesen möchstest, dann guck dir mal die Ereignisse von TServerSocket an 😉



  • ich will einfach daten aus einem client socket lesen. drum versuch ich das ganze ja auch in TForm1::ServSockClientRead allerdings muß ich ja wissen von welchem client die daten ankommen sonst weiß ich ja nicht woraus ich lesen soll.

    was mich halt interessiert wie ich feststellen kann welche id (i) das socket hat aus dem gelesen werden soll.

    wenn ich das ganze dann nur mit ServSock->Socket->ReceiveText(); realisieren will bekomm ich einen fehler sobald ich von meinem client etwas abschicke, der besagt das er keinen socket zum lesen hat (10057).



  • Das is gar nicht so schwer 😉

    Wenn bei deinem ServerSocket das OnClientRead-Event ausgelöst wird, liest du automatisch von dem Client, der die etwas sendet. Das Handle von dem Client kannst du dir ebenfalls im OnClientRead holen

    void __fastcall TGebaeude::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
       //so erhälst du den Text vom Client
       AnsiString text =    Socket->ReceiveText();
    
       //Hier hättest du das Handle vom CLIENT
       Socket->SocketHandle;
    
       //Das wäre das gegenstück, also das SERVER-HANDLE
       ServerSocket1->Socket->SocketHandle;
    }
    

    Mehr steckt da jetzt nicht dahinter



  • *outch* 😃

    danke!!! 👍


Anmelden zum Antworten