[C++ Builder] Server Socket

0

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

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 user image.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1