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 ButtonClientSocket1->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