Sockets



  • Also du machst es einem nicht gerade einfach. "getImage" finde ich nur in deinem zweiten Quellcode

    if(cmd.CompareNoCase("getImage")==0){
            int bw = grabber.Width();
            int bh = grabber.Height();
            char* image = (char*) picture; //byte* mit bild
            ret=SendBlock(soc,image,bw*bh,remoteAddr,remoteAddrLen);
        }
    

    Dort wiederum gibt es eine Funktion "SendBlock" in der ein Fehler 10014 wiederum nur von "sendto" kommen könnte. Was macht sendto()? Beziehunsgweise bei welchem Funktionsaufurf genau tritt der Fehler auf.
    Oder habe ich etwas übersehen?



  • also, das programm läuft wie folgt:

    - ich rufe in programm 1 "getImage" auf
    - darauf hin wird in programm 2 der Komunikations-Thread angesprochen
    - hier wird die funktion cmdServer aufgerufen
    - dort wird entschieden welches komando übergeben worde

    hier wie du richtig erkannt hast wird

    if(cmd.CompareNoCase("getImage")==0){
            int bw = grabber.Width();
            int bh = grabber.Height();
            char* image = (char*) picture; //byte* mit bild
            ret=SendBlock(soc,image,bw*bh,remoteAddr,remoteAddrLen);
    }
    

    aufgerufen und in sendbolck soll dann das 640 x 480 byte große bild an programm 1 übertragen werden...

    beim recvfrom des 1. programmes bekomm ich den fehler 10014

    in dem geposteten quellcode hat recvfrom nur 256 zeichen , aber auch wenn ich dies auf die 307200 erhöhe (was ich später durch einen anderen aufruf machen würde) bekomm ich diese fehlermeldung



  • Der Fehlercode bedeutet:
    "The system detected an invalid pointer address in attempting to use a pointer argument in a call."

    Kann man da nachlesen:
    http://msdn.microsoft.com/en-us/library/ms681391(VS.85).aspx



  • hmmm ok aber wieso is die pointer adressee falsch ?
    und welche ? die wo es abgespeichert werden soll oder die übertragene ...



  • ich finde

    [b]gets(buf);[/b]
    rc=sendto (s,buf,[b]strlen(buf)[/b],0,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
    

    sieht nicht gut aus. wenn ich richtig in erinnerung habe terminiert gets mit '\n' und hängt kein '\0' hintendran. was schlecht für strlen wäre.
    ausserdem solltest du gets durch fgets ersetzen. stichwort pufferüberlauf.

    edit: ok gets hängt '\0' an. also falscher alarm 😉



  • das senden geht ...
    nur das empfangen net ...



  • vielleicht liegts am fehlenden bind vor recvfrom

    http://msdn.microsoft.com/en-us/library/ms740120(VS.85).aspx

    Gruß



  • zum fehler:
    http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx

    WSAEFAULT 10014
    Bad address.

    The system detected an invalid pointer address in attempting to use a pointer argument of a call. This error occurs if an application passes an invalid pointer value, or if the length of the buffer is too small. For instance, if the length of an argument, which is a sockaddr structure, is smaller than the sizeof(sockaddr).

    liegts vielleicht daran, dass du 640x480 versendest, aber weniger empfängst; du quasi gezwungen bist die gleiche größe zu empfangen?
    hab noch nicht mit udp gearbeitet, nur könnte ein mögliches problem sein.



  • naja ich denk eher das es an den 640*480 liegt ... das scheint zu groß zu sein für udp ...

    daher wollt ich das jetzt auf tcp umstellen ...
    *grml* wollte ... leider funktioniert das nicht was ich da zusammen programmiere... hat da jemand ne funktionierende server / client verseion ?

    thx LT



  • ok hab jetzt ne funktionierende TCP Version


Anmelden zum Antworten