Robie w builderze aplikację klinet - serwer. Klient wysyła do serwera dane i wszystko jest OK, tylko jak to zrobić, żeby serwer po przerobieniu tych danych odesłał coś do klienta? W jakim to zdarzeniu umieścić?
0
0
jeżeli uzywasz kontrolek TServerSocket to:
void __fastcall TForm1::ServerSocket1ClientWrite(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString txt = ServerSocket1->Socket->ReceiveText();
if(txt=="rozkaz") Socket->SendText("odpowiedź");
}
jeżeli to nie działa to spróbuj ten sam kod ale pod zdarzeniem "ServerSocket1ClientRead"
jeżeli używasz kontrolek INDY to:
void __fastcall Tfrmserwer::IdTCPServer1Execute(TIdPeerThread *AThread)
{
if (msg=="rozkaz")
{
AThread->Connection->WriteLn("odpowiedź");
}
}
0
Dzięki za odpowiedź! Niestety w obu przypadkach wyskakuje mi wyjatek .
Na wszelki wypadek złałączam kod
Serwer
void __fastcall TfGlowny::btnUruchomClick(TObject *Sender)
{
Gniazdko->Open();
memKomunikaty->Lines->Add("Serwer uruchomiony");
}
void __fastcall TfGlowny::btnZatrzymajClick(TObject *Sender)
{
if (Gniazdko->Active)
Gniazdko->Close();
memKomunikaty->Lines->Add("Serwer został zatrzymany");
}
void __fastcall TfGlowny::GniazdkoClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
int liczby[2];
Gniazdko->Socket->ReceiveBuf(&liczby,sizeof(liczby));
Socket->SendText("odpowiedź");
}
Klient
void __fastcall TfGlowny::btnPolaczClick(TObject *Sender)
{
Gniazdko->Open();
memKomunikaty->Lines->Add("Połączenie z serwerem zostało nawiązane");
}
void __fastcall TfGlowny::btnRozlaczClick(TObject *Sender)
{
if (Gniazdko->Active)
Gniazdko->Close();
}
void __fastcall TfGlowny::btnWyliczClick(TObject *Sender)
{
int liczby[2];
liczby[0] = StrToInt(edX->Text);
liczby[1] = StrToInt(edY->Text);
Gniazdko->Socket->SendBuf(liczby,sizeof(liczby));
memKomunikaty->Lines->Add("Trwa przesyłanie danych do sewera");
}
void __fastcall TfGlowny::GniazdkoRead(TObject *Sender,
TCustomWinSocket *Socket)
{
edWynik->Text = Socket->ReceiveText();
memKomunikaty->Lines->Add("Odpowiedź z serwera uzyskana");
}
0
troszke nie za bardzi rozumiem o co chodzi: wszystko (wg. mnie:) ) wskazuje na to że
gniazdko jest serwerem a tu nagle to samo gniazdko zachowuje sie jak klient...
void __fastcall TfGlowny::GniazdkoRead(TObject *Sender,
TCustomWinSocket *Socket)
{
edWynik->Text = Socket->ReceiveText();
memKomunikaty->Lines->Add("Odpowiedź z serwera uzyskana");
}
rozumiem że wszystkie ustawienia (port, host) są poprawne.