Probleme mit ServerSocket



  • Hallo,
    ich möchte mir einen kleinen Chat zusammen bauen und wenn sich die Clients verbinden, möchte ich das es beim Server (? betritt den Channel) steht.

    Ich hab das mal so gemacht:

    Server:

    void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      RichEdit1->Lines->Add("");
      RichEdit1->Lines->Add("<"+TimeToStr(Time())+"> "+Socket->ReceiveText()+" betritt den Chat.");
    }
    

    Client:

    try
    {
      ClientSocket1->Host = "127.0.0.1";
      ClientSocket1->Port = 80;
      ClientSocket1->Active = true;
      ServerSocket1->Socket->SendText(Edit1->Text);
    } catch(...) {
    
    }
    

    Das wird dann beim Server eingetragen:
    <09:34:23> betritt den Chat.

    ich weiss jetzt nicht, ob ich das so richtig gemacht habe.
    Ich danke euch schonmal für die hilfe.

    MfG



  • Hallo,

    also zunächst will der Client den Text senden nicht der Server. Dazu musst du allerdings warten bis der Client mit dem Server verbunden ist. Die Events von TServerSocket / TClientSocket sind da nicht ganz uninteressant 🙂

    void __fastcall TForm1::Button1Click(TObject *Sender)
    { // Mit dem Server verbinden
    ClientSocket1->Host = "127.0.0.1";
    ClientSocket1->Port = 1111;
    ClientSocket1->Active = true;
    }
    
    void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
          TCustomWinSocket *Socket)
    { // Wenn mit dem Server verbunden Text senden
    ClientSocket1->Socket->SendText("Silent Observer");
    }
    
    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    { // Text empfangen und ausgeben
    Memo1->Lines->Add("<"+TimeToStr(Time())+"> "+Socket->ReceiveText()+" betritt den Chat.");
    }
    

    oder:

    void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
          TCustomWinSocket *Socket)
    { // Bei eingehender Verbindung
    Memo1->Lines->Add("<"+TimeToStr(Time())+"> "+Socket->RemoteAddress+" betritt den Chat.");
    }
    

    Im BCB gibt es auch ein komplettes Chatbeispiel ( BCBPATHBCB_PATH\Examples\Internet\Chat )

    mfg, Micha!



  • Vielen Dank für die Hilfe.

    also, das mit RemoteAdress funktioniert, aber wieso wird der Nickname nicht ausgegeben beim Server, wenn der Client sich Connected?

    Das hier wird ausgegeben:
    <11:20:48> betritt den Chat.

    Der Nick ist hier nicht zusehen, woran kann das liegen?

    EDIT: Ich hab das mal getestet, also nach dem 4ten mal einloggen wird der Nick erst gesendet, hab ich vll etwas vergessen?

    MfG



  • RandomAccess85 schrieb:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    { // Mit dem Server verbinden
    ClientSocket1->Host = "127.0.0.1";
    ClientSocket1->Port = 1111;
    ClientSocket1->Active = true;
    }

    void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
    TCustomWinSocket *Socket)
    { // Wenn mit dem Server verbunden Text senden
    ClientSocket1->Socket->SendText("Silent Observer");
    }

    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
    TCustomWinSocket *Socket)
    { // Text empfangen und ausgeben
    Memo1->Lines->Add("<"+TimeToStr(Time())+"> "+Socket->ReceiveText()+" betritt den Chat.");
    }

    Hallo,

    wie gesagt, erst Verbinden, dann senden

    mfg, Micha!



  • Ich habe das ja so gemacht, also erst Verbinden und dann senden, leider geht das nicht.
    Naja ich werd mal gucken ob ich den fehler finde.
    Vielen Dank.

    MfG


Anmelden zum Antworten