Winsock Problem bei Datenübertragung



  • Wieso widerspreche ich mir? Lest mal genau!

    Was ist bitte der Unterschied:

    char str[256] = "";

    oder

    char str[256] = {0};

    sollte beides den selben Effekt haben.
    Verbessert mich, wenn ich mich irre.

    Auf jedenfall ist es seltsam:

    strcpy(buf,"Hallo wie gehts?");
    rc=send(s,buf,9,0);
    

    Wieso 9?



  • 1. hab ich genau gelesen - du hast es einfach falsch geschrieben...

    2. gehört das, was du jz fragst zu den grundlagen...

    = {0} : _alle_ Elemente mit 0 initialisieren

    = "" : _erstes_ Element mit '\0' (= 0) initialisieren
    und da das erste element eh wieder überschrieben wird (wenn nix schief geht ^^), kannste so was auch gleich weglassen...

    bb


  • Administrator

    "blablabla\0"
    Ist Käse. In C und C++ haben String Literale automatisch eine 0 Terminierung.

    unskilled schrieb:

    gehört das, was du jz fragst zu den grundlagen...

    = {0} : _alle_ Elemente mit 0 initialisieren

    = "" : _erstes_ Element mit '\0' (= 0) initialisieren
    und da das erste element eh wieder überschrieben wird (wenn nix schief geht ^^), kannste so was auch gleich weglassen...

    Du solltest mal deine Grundlagen auffrischen. "" ist genauso ein Intializer bei char Arrays wie { 0 } . Alle übrigen Elemente werden mit dem Default-Value-Intializer initialisiert. Ein Unterschied gibt es hier somit nicht.

    Grüssli



  • Dann sag nicht üöä falsch, sondern sag mir, was an der Aussage falsch ist!

    Auf jedenfall, weiß ich nicht, was du willst,

    char bla[10] = "";

    und char bla[10] = {0};

    hat bei mir den selben Effekt.



  • unskilled schrieb:

    gehört das, was du jz fragst zu den grundlagen...

    = {0} : _alle_ Elemente mit 0 initialisieren

    = "" : _erstes_ Element mit '\0' (= 0) initialisieren
    und da das erste element eh wieder überschrieben wird (wenn nix schief geht ^^), kannste so was auch gleich weglassen...

    Du solltest mal deine Grundlagen auffrischen. "" ist genauso ein Intializer bei char Arrays wie { 0 } . Alle übrigen Elemente werden mit dem Default-Value-Intializer initialisiert. Ein Unterschied gibt es hier somit nicht.[/quote]

    humm.. is mir neu - im standard hab ich jz zwar net geschaut aber mein treuer gefährte, der msvc gibt dir auf jeden fall recht

    sry ^^



  • Run-Time Check Failure #3 - The variable 's' is being used without being initialized.
    

    Visual C++ 2008 gibt mir diese Meldung aus, wenn ich Client & Server starte...

    Cypog schrieb:

    strcpy(buf,"Hallo wie gehts?");
    rc=send(s,buf,9,0);
    

    Wieso 9?

    Ich wollte nur testen. Ich weiß, dass dann nur "Hallo wie" übertragen wird.

    theta schrieb:

    Es ist immer dasselbe...
    recv(..) kehrt nicht unbedingt dann zurück, wenn dein String vollständig übertragen ist, sondern auch mehrmals... Du musst berücksichtigen, dass z.B. zerst 5 Bytes, dann 7 Bytes übertragen werden...

    Simon

    Okay ^^. Und wie kriege ich das jetzt zum Laufen? Wenn ich den String terminiere, sendet er gar nichts...


  • Administrator

    skullyan schrieb:

    Visual C++ 2008 gibt mir diese Meldung aus, wenn ich Client & Server starte...

    Was ja auch stimmt. Du verwendest die Variable s ohne sie jemals initialisiert zu haben. Du verwendest als Socket acceptSocket und connectedSocket , aber s wird nirgends initialisiert. Das muss scheitern ...

    Grüssli

    PS: Irgendjemand hat den Thread gekillt ... zumindest bei mir ist die Formatierung futsch ...



  • Forum-Bug?!

    scho ma versucht, die Fehlermeldung zu lesen?

    und noch wichtiger: scho ma versucht, den Quellcode, den du vor dir hast, zu verstehen?

    ich würd außerdem ma behaupten wollen, dass du was geändert hast, nachdem du ihn runtergeladen hast - und die Änderung war sicherlich falsch 😛

    Aber ich bin ma nich so:
    -> s ist nicht initialisiert ^^ wahrscheinlich verstehst du das mit dem fkt aufrufen nich ganz und hast dir deshalb extra noch nen SOCKET erstellt, der s heißt, der Aufruf sollte aber vrmtl mit connectedSocket statt s geschehen...
    -> kann jmd den Thread evtl ma ins WinAPI-Forum verschieben?!

    bb



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • unskilled schrieb:

    Forum-Bug?!

    scho ma versucht, die Fehlermeldung zu lesen?

    und noch wichtiger: scho ma versucht, den Quellcode, den du vor dir hast, zu verstehen?

    ich würd außerdem ma behaupten wollen, dass du was geändert hast, nachdem du ihn runtergeladen hast - und die Änderung war sicherlich falsch 😛

    Aber ich bin ma nich so:
    -> s ist nicht initialisiert ^^ wahrscheinlich verstehst du das mit dem fkt aufrufen nich ganz und hast dir deshalb extra noch nen SOCKET erstellt, der s heißt, der Aufruf sollte aber vrmtl mit connectedSocket statt s geschehen...
    -> kann jmd den Thread evtl ma ins WinAPI-Forum verschieben?!

    bb

    JAAA!! Das war es, danke!! 🙂


Anmelden zum Antworten