Netzwerk Chat Programm mit mit einem Client und Server



  • Hallo!
    Ich soll in der Schule ein Netzwerk chat Programm schreiben, was aus einem separatem Server und einem Client steht. Sozusagen also 2 Programme.

    Ich bin soweit gekommen, dass die beiden Programme auf einander connecten können. Allerdings weiß ich nicht, wie man einen Text über den Client zum Server schickt und wieder empfängt. Die Aufgabe besteht erst mal nur darin, einen Client zu erstellen, der sich selbst (localhost) Nachrichten auf den Server sendet und wieder empfängt.

    Hier der Code für den Serversocket:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    ServerSocket1->Port = Edit1->Text.ToInt();
    ServerSocket1->Open();
    Panel1->Color = clGreen;
    Memo1->Lines->Add ("Server connected");
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    ServerSocket1->Close();
    Panel1->Color = clRed;
    Memo1->Lines->Add("Server disconnected");
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    Memo1->Lines->Add(
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ServerSocket1ClientWrite(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    ServerSocket1->Socket->SendText();
    }
    //---------------------------------------------------------------------------
    

    und hier der Code für den Clientsocket:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    Panel1->Color = clGreen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ClientSocket1Connecting(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    Panel1->Color = clYellow;        
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    Panel1->Color = clRed;        
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    ClientSocket1->Port = Edit1->Text.ToInt();
    ClientSocket1->Address = Edit2->Text;
    ClientSocket1->Open();        
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    ClientSocket1->Close();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
    Panel1->Color = clRed;
    Application->MessageBox ("Ein Fehler ist aufgetreten, es konnte keine Verbindung zum Server hergestellt werden. Stellen Sie sicher, dass der Server verbunden ist.","Fehler",MB_OK);        
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Memo1->Lines->Add (Edit3->Text);
    ClientSocket1->Socket->ReceiveText();
    
    }
    //---------------------------------------------------------------------------
    

    Bitte um schnelle Hilfe, Danke



  • Zum Senden an den Server einfach

    ClientSocket1->Socket->SendText()
    

    Damit der Server den Text wieder zurücksendet in das OnClientRead Ereignis beim ServerSocket

    for (int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
        ServerSocket1->Socket->Connections[i]->SendText(Socket->ReceiveText());
    

    bzw da du ja nur einen Client hast

    ServerSocket1->Socket->Connections[0]->SendText(Socket->ReceiveText());
    


  • Hallo Leute,

    ich habe eine ähnliche Frage, die zum Thema passt. Wie kann ich einen Chat mit einem Server und beliebig vielen Clients schreiben? Man soll beim Client einfach nur die IP des Servers eingeben müssen.



  • chatter schrieb:

    Hallo Leute,

    ich habe eine ähnliche Frage, die zum Thema passt. Wie kann ich einen Chat mit einem Server und beliebig vielen Clients schreiben? Man soll beim Client einfach nur die IP des Servers eingeben müssen.

    Hallo,

    steht im Post von ulf87 beschrieben

    for (int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
        ServerSocket1->Socket->Connections[i]->SendText(Socket->ReceiveText());
    

    LG, Micha


Log in to reply