Sockets: send und recv



  • und wie geht das? wo finde ich überhaupt ein tutorial dafür?. z.b auf c-worker.ch is ja kein api da is es alles nicht so schwer.

    oder willst dus mir erklären oda ein anderer?

    ausserdem möchte ich recv nicht immer aufrufen müssen, das sollte von alleine die daten empfangen. Wenn das in ner schleife wäre oda so dann würde die ganze zeit nur so komische sachen empfangen wo nur blödsinn drin steh oda?

    habs gerade mit ner entlos schleife immer aufgerufen 😃 mein labtop hat sich fasst aufgehangen 😃



  • ausserdem möchte ich recv nicht immer aufrufen müssen, das sollte von alleine die daten empfangen.

    Würde ich mal dem :xmas1: mitteilen. 🕶



  • 😃 ja is kla nur wie? ich finde ja nirgentswo mal was wo das alles mal steht? und bücher darüber gibts ja auch nicht.



  • Es wurde Dir doch schon gesagt:
    Du mußt ein Protokoll implementieren!

    Zum Beispiel:
    Immer wenn per send Daten gesendet werden, wird VORHER die Länge der Daten ermittelt. Diese Länge wird zuerst gesendet, am besten in einem String fester Länge, je nach Anforderung zB 5 Byte.
    Die Gegenstelle liest mit dem/den ersten recv diese 5 Byte, weiß dann, wieviel Byte Daten noch kommen, und liest in einer Schleife mit recv solange Daten, bis alle angekommen sind.
    Das macht man auf Server und auf Client - Seite, und dann fluppt das.



  • ja das problem ist ich weiss nicht wie das geht, weil ichs nochnie irgentwo gesehn hab, weils nirgentswo steht 😞



  • metapoint2011 schrieb:

    ja das problem ist ich weiss nicht wie das geht, weil ichs nochnie irgentwo gesehn hab, weils nirgentswo steht 😞

    Belli hat doch gerade ein Beispiel gebracht.

    Irgendwann sollte man auch mal an den Punkt kommen, dass man nicht mehr nur Code abschreibt.



  • ja da hast du recht.

    aba im endeffekt tut man bei nem buch eigentlich auch erstmal die sachen kopieren um es zu lernen und dafür gibts ja keine beispiele. ausser son bisschen in der msdn.

    ich sitz da halt schon voll lange dran 😞

    und die länge ist doch schon im 3 parameter vom recv und im send oder nicht?

    und das senden geht schon nicht weil die bytes imma -1 sind



  • Das Ganze mit dem Protokoll geht ungefähr so (zumindest hab ich es so gelöst).

    Der Server sendet dem Client eine Kennung, damit der Client weiß, daß nun Daten kommen. z.B. "READY".
    Der Client empfängt das "READY" und sendet dem Server ein "OK".
    Nun weiß der Server, daß der Client etwas empfangen möchte und sendet nun seine Daten. Wenn du ganze Dateien übertragen möchtest, dann mußt du sie Paketweise schicken, und der Client auch immer Paketweise empfangen.

    Wichtig dabei ist, daß der Server und der Client aufeinander abgestimmt werden. Sprich Server sendet Schlüsselwort, Client bestätigt. Server sendet, Client empfängt, und bestätigt Empfang, Server sendet nächsten Block usw.
    (Sowas nennt man übrigens Protokoll)

    Dabei gibt es wiederum verschiedene Techniken.
    Ich arbeite z.B. mit festen Längen. Der Server sendet 1000 Bytes und wartet auf ein receive, der Client empfängt 1000 Bytes und sendet ein OK zurück was der Server, der ja auf receive geschaltet ist wiederum zum Anlass nimmt die nächsten 1000 Byte zu senden usw. Ein ständiges Wechselspiel.

    Belli macht es wohl noch flexibler und sendet die Länge des Blocks worauf der Client weiß, daß nun X Bytes kommen. usw.

    Auch kann man später, wenn es erstmal fluppt bestimmt noch am Protokoll feilen, so daß die Performance steigt, oder man auch mit Prüfsummen arbeitet, um Übertragungsfehler zu vermeiden, was aber dann wiederum das Protokoll komplizierter macht.

    Das A und O ist jedoch die Synchronisation zwischen der Server/Client Kommunikation. Also, wenn der Server sendet muß der Client auf Empfang stehen und umgekehrt.

    Gruß,
    DC



  • metapoint2011 schrieb:

    ja da hast du recht.

    aba im endeffekt tut man bei nem buch eigentlich auch erstmal die sachen kopieren um es zu lernen und dafür gibts ja keine beispiele. ausser son bisschen in der msdn.

    ich sitz da halt schon voll lange dran 😞

    und die länge ist doch schon im 3 parameter vom recv und im send oder nicht?

    und das senden geht schon nicht weil die bytes imma -1 sind

    Wenn ich Deine im ganzen Forum verstreuten Posts richtig interpretiere, dann möchte ich Dir folgenden Hinweis geben:
    Lerne erst mal C oder C++, je nach Gusto.
    Wenn Du das einigermaßen drauf hast, dann beschäftige Dich entweder mit Socket-Programmierung --> aber schreib dann erst mal Konsolenprogramme, oder beschäftige Dich mit Windows-Programmierung, Fenster/Controls erstellen, Nachrichten bearbeiten und was da so zugehört.
    Dann das jeweils andere (Windows- oder Socketprogrammierung, je nachdem, was Du zuerst gemacht hast). Zwischendurch oder aber hinterher noch Programmierung/Handling von Threads mit dem, was da zugehört --> Synchronisation, Informationsaustausch zwischen Threads.

    Ich habe nämlich stark das Gefühl, Du willst viel zuviel auf einmal, und ich habe den Anschein, das wird so nix.

    Just my 2 Cents ....



  • das was ich mir in c beigebracht habe war alles über online tutorials..
    jürgen wolf und so und jetzt hab ich mir ein buch bestellt.

    vorher konnte ich mir leider keins leisten.

    ein buch über windows programmierung habe ich schon (womit ich noch nicht sooo sehr weit bin).

    und die socket programmierung brauchte ich jetzt nur für ein kleinen teil eines programms, da das in der konsole nicht so schwer war, dachte ich das es mit der api auch nicht umbedingt viel komplizierter ist.

    warscheinlich ist es ein bisschen zu viel auf einmal, aba nur weil ich gerade extrem süchtig danach bin, was sich wieder ein wenig legen wird.

    ausserdem ist ein forum da um sich gegenseitig zu helfen. meistens geht es auch nur um wenige zeilen code die berichtigt oder geschrieben werden müssen.
    manche hier sind sogar sehr nett und helfen einem wirklich sehr viel weiter und helfen auch vieles besser zu verstehen.

    du hast mir erklärt wie ich mein weg in der programmierung am besten gehe, das ist auch sehr nett von dir, doch deine beurteilen über mich ist meiner meinung nach teilweise sehr übertrieben.

    hab hier nicht meine posts überall verstreut. es sind cd 9 hier in WinApi. wovon schon 6 gelöst sind oda so. und 1 bei c. also echt frech von dir das einfach so zu behaupten.

    dann hast du ja den anschein das das nix wird. du weisst nicht wie ich arbeite, wer ich bin und wie ich bin. ich denke nicht das du das so schnell beurteilen kannst.

    ausserdem kannst du sowas auch vernünftig sagen ohne jemanden gleich anzugreifen immerhin habe ich dir in keinster weise etwas getan.



  • metapoint2011 schrieb:

    hab hier nicht meine posts überall verstreut. es sind cd 9 hier in WinApi. wovon schon 6 gelöst sind oda so. und 1 bei c. also echt frech von dir das einfach so zu behaupten.

    dann hast du ja den anschein das das nix wird. du weisst nicht wie ich arbeite, wer ich bin und wie ich bin. ich denke nicht das du das so schnell beurteilen kannst.

    ausserdem kannst du sowas auch vernünftig sagen ohne jemanden gleich anzugreifen immerhin habe ich dir in keinster weise etwas getan.

    Vielleicht habe ich mich unglücklich ausgedrückt. Ich wollte Dich in keiner Weise angreifen.
    Ich habe im C-Forum gesehen, daß Du Probleme mit relativ einfachen Aufgabenstellungen in C hast. Deshalb wollte ich Dir nahelegen, Dich erst mal damit zu beschäftigen. Das C von A - Z von JW finde ich übrigens gar nicht so schlecht, wie manch andere, die immer ziemlich pauschal auf JW schimpfen, aber das ist natürlich auch Geschmacksache.
    Naja, und hier in WinApi hab ich den Eindruck gewonnen, daß Du ansatzweise mit GUI-Programmierung, Threads und Sockets arbeitest, bzw. darüber nachdenkst, damit zu arbeiten. Allerdings glaube ich, daß Du keines von den Themen gründlich genug beherrschst.
    Natürlich kann niemand alles wissen, und jeder wird früher oder später mal Hilfe benötigen, ist doch völlig klar.
    Aber Du machst auf mich den Eindruck, als wenn Dir zu allen genannten Themen noch Grundlagen und/oder Erfahrung fehlen. Deshalb nochmal: Lerne eins nach dem anderen, und mach kleine Schritte dabei, sonst wirst Du vielleicht auch schnell den Spaß an der Sache verlieren.
    Und wie gesagt, ich will Dich weder beleidigen, noch angreifen, dazu hab ich gar keinen Grund - außerdem kenne ich Dich nicht hinreichend, so daß ich mich auch irren kann, also: nicht sauer sein!



  • s=socket(AF_INET, SOCK_STREAM, 0); // error: 0 = IPPROTO_IP, da gibt kein connect
    

    Connect gibts ab IPPROTO_TCP, IPPROTO_UDP ...

    addr.sin_port=htons(12345);
    

    Port 12345 kann geblockt werden; NetBus Trojan; hast Du nen firewall oder LockDown 2007 😉 ?



  • An der 0 beim socket-Aufruf liegts nicht:

    If a value of 0 is specified, the caller does not wish to specify a protocol and the service provider will choose the protocol to use.



  • hey metapoint2011,

    hast du schon eine lösung für dein problem?
    wenn nicht würde ich dir mal auszüge aus meinem code posten. du arbeitest mit tcp sockets, oder?

    MFG DerCoder



  • ja genau.. nein habs nochnicht geschafft, das wäre echt lieb von dir.


Anmelden zum Antworten