Bloss jede zweite Nachricht kommt an (TClientSocket, TServerSocket)



  • Hi...

    Ich habe mal wieder ein Problem: Ich verschicke mithilfe von TClientSocket und
    TServerSocket Text. Das Problem ist, dass bloss jede zweite Nachricht vom
    Gegenueber empfangen wird.

    Also mal ein Beispiel: Sagen wir ich verschicke an einen Computer den Text
    Text1, Text2 und Text3. Abgesendet wird alles ganz schoen,
    doch empfangen wird entweder bloss Text1 und Text3 oder nur Text2.

    Hier mal ein bisschen code:

    void __fastcall TForm1::SendBtnClick(TObject *Sender)
    {
        ClientSocket->Address = Edit1->Text; // IP Adresse aus Edit1 lesen
        ClientSocket->Active = true; // Verbindung herstellen
        AnsiString Msg = RichEdit1->Lines->Strings[RichEdit1->Lines->Count-1]; // Nachricht
        ClientSocket->Socket->SendText (  Msg ); // Nachricht schicken
        RichEdit1->Lines->Add ( "Send: " + Msg ); // Zeigen, dass Nachricht geschickt wurde
        ClientSocket->Active = false; // Verbindung beenden
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ServerSocketClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
        // ankommenden Text in RichEdit1 schreiben
        RichEdit1->Lines->Add ( "Receive: " + Socket->ReceiveText() );
    }
    //---------------------------------------------------------------------------
    

    Eigentlich ganz einfach der Code... Deshalb versteh ich auch nicht, warum das
    Problem auftaucht.
    Weiss jemand Rat?

    MfG Aoeke



  • also ich vermute mal dass der client nicht schnell genug connected (Ich bekomm die Fehlermeldung 'Auf API send', und das passiert nur wenn man nicht connected ist (zumindest is es mir noch nie anders passiert.

    Lösung:
    einfach in einen anderen Button

    ClientSocket1->Host = Edit1->Text; // IP Adresse aus Edit1 lesen
    ClientSocket1->Active = !ClientSocket1->Active; // Verbindung herstellen/trennen
    

    oder du kannt das auch so machen: Einfach ´ne while Schleife einsetzen die solange durchläuft wie noch nicht verbunden ist:

    ClientSocket1->Host = Edit1->Text; /* IP Adresse aus Edit1 lesen*/
        ClientSocket1->Active = true; /*Und connecten*/
        while (ClientSocket1->Socket->Connected == false)
          {
          Application->ProcessMessages();
          //Solange nichts machen wie der Client noch nicht verbunden ist
          }
        AnsiString Msg = RichEdit1->Lines->Strings[RichEdit1->Lines->Count-1]; /* Nachricht*/
        ClientSocket1->Socket->SendText (  Msg ); /* Nachricht schicken*/
        RichEdit1->Lines->Add ( "Send: " + Msg ); /* Zeigen, dass Nachricht geschickt wurde*/
        ClientSocket1->Active = false; /*Und wieder trennen*/
    

    Ich denke mal mit einer der 2 Lösungen wirst du wohl zufrieden sein 😉

    J0



  • Hallo!

    Ich denke mal mit einer der 2 Lösungen wirst du wohl zufrieden sein

    Ohoh... Hoffentlich nicht...
    Schon mal überlegt, was hier passiert, wenn der Connect fehlerhaft ist?!

    tschüss
    Robert


Anmelden zum Antworten