Grundsätze der Socketprogrammierung



  • Hallo

    Du must dir ein Protokoll entwickeln, wo der Client weiß mit welcher Syntax er welche Daten in einem festen Format bekommt. Stell es dir wie ein Chat vor, bei dem nur genau definierte Fragen nach genau definierten Werten erlaubt sind.

    bis bald
    akari



  • Danke für deine Hilfe,
    ich werde es Versuchen.

    Noch ein paar Fragen, wenn ich einen Socketserver unter für meinem Rootserver welcher auf Linux (debian) läuft programmieren will, welches Programm ist dafür geeignet und was muss ich bei der Programmierung beachten (ist ja sicherlich anders als mit dem VCL vom Builder). Das Beachten bezieht sich darauf, dass das ganze Später auch unter Debian läuft und zum 2 darauf, wie ich dann die Sockets verschicken kann etc. Gibt es dafür vieleicht ein Tutorial? Oder könntest du es mir eventuell an einem kleinen Serverbeispiel zeigen?

    LG

    L



  • *push*

    Hatt keiner hilfe fuer mich?



  • Hallo

    Dafür bist du hier im falschen Forum. Wenn du Hilfe für Linux-Programmierung haben willst must du ins Linux-Forum gehen. Wenn du Hilfe für portable Netzwerk-Programmierung haben willst, must du ins C++ Forum gehen (dort wird man dir zu boost::asio raten).

    bis bald
    akari



  • Ok, danke. Ich werde mich dort mal melden.

    Noch eine Frage zur Socketprogrammierung im Builder. Wie kann ich vom Server bestimmen lassen, von welchem Clienten das Signal kommt?

    Moechte eine OnConnect reagtion des Servers haben

    Beispiel
    Client Connected -> Server->Sendet, "Verbindung Hergestellt"

    Wie kann ich auslesen, dass die OnConnect reaktion (oder eben der Socket) von dem Clienten x gesendet wurde ?

    Bitte um schnelle Hilfe.

    LG

    L



  • Hat dazu keiner eine loesung??? Bitte, brauche dringen Hilfe.

    Hier nochmal mein Problem mit ein paar mehr Details:

    ich bin nun dabei, erstmal Testweise ein Programm für Windows mit dem C++ Builder 6 von Borland zu machen.

    Klappt auch soweit (verbindung aufnehmen und Sockets verschicken). Nun wollte ich aber, das der Client ein Socket an den Server schickt und dieser eine Antwort nur an genau diesen Clienten verschickt. Wie kann ich das bewerkstelligen.

    Die ID des Clienten ist ja meines wissens nach nicht fest. Sobald dich jemand ausloggt, rutschen alle Clienten nach. Mit welchem Befehl, kann ich vom ServerSocket die Client-Adresse den Clienten angeben, auf wessen Socket gerade vom Server reagiert wird.

    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    
    //EMPFANGEN DES STEAMS
    TMemoryStream *Empfangen = new TMemoryStream;
    {
    int BufferGroesse = Socket->ReceiveLength();
    BYTE *Buffer_BYTEp = new BYTE[BufferGroesse];
    Socket->ReceiveBuf(Buffer_BYTEp, BufferGroesse);
    Empfangen->WriteBuffer(Buffer_BYTEp, BufferGroesse);
    Empfangen->SaveToFile("Empfangen.tmp");
    DatenEmpfang->LoadFromFile("Empfangen.tmp");
    DeleteFile("Empfangen.tmp");
    delete [] Buffer_BYTEp;
    delete Empfangen;
    }
    }
    

    Daten werden in diesem Code empfangen. Nun soll an den Clienten, welcher die Reaktion ausgeloest hat eine Antwort schicken (und nur an den Clienten nicht an alle)

    TMemoryStream *Connect = new TMemoryStream;
    //ERSTELLE DATEN
    DatenSend->Add("sys01");
    DatenSend->Add("TEXT MEINER WAHL");
    DatenSend->SaveToFile("Sending.tmp");
    DatenSend->Clear();
    Connect->LoadFromFile("Sending.tmp");
    DeleteFile ("Sending.tmp");
    ServerSocket1->Socket->Connections[x]->SendStream(Connect);
    

    Hierbei soll dan an der Stelle

    ServerSocket1->Socket->Connections[x]->SendStream(Connect);
    

    das x = der SocketID entsprechen.

    Ich hoffe ihr koennt mir helfen. Bin ueber jede Hilfe dankbar.

    Danke für eure Hilfe

    LG L



  • L schrieb:

    Mit welchem Befehl, kann ich vom ServerSocket die Client-Adresse den Clienten angeben, auf wessen Socket gerade vom Server reagiert wird.

    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    ...
    

    Was meinst du, wozu dir da ein TCustomWinSocket*-Parameter übergeben wird? 😉



  • Danke fuer deine Schnelle Antwort. Leider verstehe ich leider nicht ganz, wie ich das nun bewerkstelligen kann.

    Was schreibe ich nun anstelle des X rein?

    Bitte erklaere es mir nochmal fuer "Dumme"!

    Danke 🙂



  • L schrieb:

    Was schreibe ich nun anstelle des X rein?

    Gar nichts. Du benutzt einfach Socket anstelle von ServerSocket1->Socket->Connections[whatever] .



  • Lol, das ist so einfach....man, ey wtf und ich sitze da 2 Tage dran und versuche mir eigene Funktionen und Methoden zu schreiben, welche das erledigen.

    Vielen Vielen dank!!! Du hast mir sehr geholfen!!!


Anmelden zum Antworten