Netzwerkübertragungen



  • PuppetMaster2k schrieb:

    Hast du dir in der FAQ schon mal das Thema zur Protokollentwicklung angesehn? Das solltest du dir unbedingt durchlesen!

    Ich weiß dass man das mit SubStrings und dem ganzen Zeugs machen kann, aber gibt es keine einfachere Möglichkeit?



  • neobanz. schrieb:

    Ich weiß dass man das mit SubStrings und dem ganzen Zeugs machen kann, aber gibt es keine einfachere Möglichkeit?

    Nein. Hast du dir mal die verschiedenen RFCs zu den diversen Protokollen angesehen? Z.B. TCP, HTTP, IMAP etc. Ohne die Entwicklung eines Protokolls lässt sich so etwas IMHO nicht richtig realisieren.



  • PuppetMaster2k schrieb:

    neobanz. schrieb:

    Ich weiß dass man das mit SubStrings und dem ganzen Zeugs machen kann, aber gibt es keine einfachere Möglichkeit?

    Nein. Hast du dir mal die verschiedenen RFCs zu den diversen Protokollen angesehen? Z.B. TCP, HTTP, IMAP etc. Ohne die Entwicklung eines Protokolls lässt sich so etwas IMHO nicht richtig realisieren.

    Ich habs rausbekommen, danke!!! 😃



  • Und wie sieht die Lösung aus? Nur mal rein interessehalber?



  • if (Server->Active)
          {
             if (Key==VK_RETURN)
             {
             Server->Socket->Connections[0]->SendText(":" + Texteingabe->Text + ";");
             }
          }
    
    if (Client->Active)
          {
             if (Key==VK_RETURN)
             {
             Client->Socket->SendText(":" + Texteingabe->Text + ";");
             }
          }
    
    //><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
    
    void __fastcall TMain::Lesen(TObject *Sender, TCustomWinSocket *Socket)
    {
    AnsiString paket=Socket->ReceiveText();
    int nummer = paket.Pos(":");
    int length = paket.Pos(";");
    paket = paket.SubString(nummer+1,length-2);
    
    Memo->Lines->Append(paket);
    
    }
    //><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
    
    void __fastcall TMain::Clientlesen(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    
    AnsiString paket=Socket->ReceiveText();
    int nummer = paket.Pos(":");
    int length = paket.Pos(";");
    paket = paket.SubString(nummer+1,length-2);
    
    Memo->Lines->Append(paket);
    
    }
    //><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
    

    Naja die Lösung find ich eigentlich am besten, weil ichs selber gmacht hab un ned irgendwo rauskopiert hab 😉 .
    Ist das nicht optimal? 🙄



  • Schlecht.
    Du wirst Probleme bekommen.
    Ok, ich weiß nicht was übertragen werden soll aber egal..
    Du schreibst hier:
    [cpp]
    int nummer = paket.Pos(":"); // Das erste : suchen und Position zurückgeben
    int length = paket.Pos(";"); // Das erste ; suchen und Position zurückgeben
    [/cpp]

    Daran sollte dir was auffallen, also schlecht kopiert.
    Hättest besser richtig kopiet. 😉

    Was ist wenn der String so ausähe:

    AnsiString paket=Socket->ReceiveText();
    paket = ":Hallo du bist schlecht im kopieren;und ich nicht.;";
    

    Da würde dein Ding nach kopieren schon killen.

    Solltest lieber vor dem Doppeltpunkt die richtige länge des String angeben....
    Wenn du was halbes kopierst, solltest du auch in der Hilfe nach schauen was die Funktionen machen (z.B. pos() )..

    2. Warum immer das Rad neu programmieren? Wenn die Mods nicht wollen, das du den Code nehmen sollst, würde Sie es nicht hin tippen.

    KAnnst ja noch die Client ID mit rein packen. Und schon hast du was anderes als in der FAQ. Vielleicht nocht die IP. 😕 🙄 🕶 😋 🤡

    Gruß



  • sorry ich verstehe dich nicht ganz. Dass er den Text gleich danach wieder killt ist mir auch aufgefallen 😃 . Habe mir vielleicht gedacht dass ich alles in eine Textdatei schreibe 😕

    Könntest du mir vielleicht sagen wie du es machen würdest? 😉
    ..habs halt leider noch nicht so drauf 😞



  • Warum sendest du denn nicht einfach die Länge mit? Dann kannst du nach Empfang prüfen, wie lang der String sein soll und wie lang er tatsächlich ist.



  • Ja, und wenn ich 3 Sachen versenden will, z.B.
    1. Texteingabe->Text; //Chatfunktion
    2. Shape1->Left;
    3. Form1->Color;

    Wie soll ich das dann anstellen?
    so: 5:Hallo2:239:clBtnFace 😕
    konflikt: 2:23|9

    würdest du mir bitte ein beispiel geben?



  • Wo liegt da der Konflikt?



  • neobanz. schrieb:

    Ja, und wenn ich 3 Sachen versenden will, z.B.
    1. Texteingabe->Text; //Chatfunktion
    2. Shape1->Left;
    3. Form1->Color;

    Wie soll ich das dann anstellen?
    so: 5:Hallo2:239:clBtnFace 😕
    konflikt: 2:23|9

    würdest du mir bitte ein beispiel geben?

    Würd ich so machen:
    so: 5:Hallo:3:239:9:clBtnFace

    Ganz einfach, so wie es in der FAQ steht. 😉 😮

    Du nimmst erst den ersten wert. Da hast du eine 5 drin.
    Also ist Texteingabe->text 5 Zeichen lang.

    Das heißt das du mit substr (wenn ich mich nicht irre) den teil raus holen kannst.

    Dann rechnest du wo dann die nächste länge steht.
    1 => Zeichenlänge (5)
    +1 => Der : nach der länge.
    +5 => Der Text (Texteingabe->text)
    +1 => Der : nach dem Text
    =8 // Nach dem 8. Zeichen wäre dann die nächste länge.

    Wie komm ich auf die Rechnung?
    usw.

    Falsch du es wünscht, kann ich dir ein Code sample machen...


Anmelden zum Antworten