leichte probleme mit recvfrom in c++ socket

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Hallo alle zusammen, finde euer Forum sehr interessant,vielleicht könnt ihr mir ja helfen, ich hab da ein kleines Problem mit meinem C Code.
    Ich habe im moment ein Schulprojekt am laufen und muß dafür ein Programm schreiben, es greift unter Linuxüber ein UDP Socket auf einen Microcontroller zu unter c läuft das Programm super, aber nun soll das Programm mit einer Oberfläche verbunden werden die in C++ programmiert wurde,
    genauer in QT.
    Habe den Code erstmal in den Oberflächen Source Code übernommen, mich durch einige fehler gewühlt, aber einer, einer ist hartnäckig ich kriege ihn nicht weg. Vieleicht könnt ihr mir helfen.
    Ich lege die Source Code datei im anhang bei, schaut mal bitte rein.
    Natürlich fehlt da noch eine menge für die weiter verarbeitung der daten, aber erst mal sollte dies hier funktionieren

    #include <qapplication.h>
    #include "wetterstationmainwindowimpl.h"
    #include "wettercanvasview.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    //#include <iostream.h>
    void UdpClient (); // Send data to Server...

    int main( int argc, char ** argv ) {
    QApplication app( argc, argv );
    WetterStationMainWindowImpl mainwindow;
    app.setMainWidget(&mainwindow);

    mainwindow.show();

    //UDP client
    //=====================================================================

    UdpClient ();

    //werte übergabe
    //=====================================================================


    mainwindow.setValues(3,28.6,150,27.3,224,6);
    mainwindow.setValues(4,26.7,150,26.2,224,6);
    mainwindow.setValues(5,25.7,150,25.4,224,6);
    mainwindow.setValues(6,22.2,250,25.8,224,6);

    return app.exec();
    }
    //udpclient eigendliche werte
    //=====================================================================

    void UdpClient ()
    {
    int b;
    double CH0;
    double CH1;
    double CH2;
    double CH3;
    double CH4;

    // printf ("\n UDP Client (Linux) Vers. 1.00 is using port \"%d\"", nPort);
    // printf ("\n =============================================================");

    for(b=0;b <=4;b++)
    {
    char szBuf[1024];
    char szBuf1[1024];
    int nRet, theSocket;
    //int nFromLen;


    // Create a UDP/IP datagram socket...
    //===============================================================================
    theSocket= socket (AF_INET, SOCK_DGRAM, 0);
    // ... and check for error...
    if (theSocket < 0) {
    printf ("\n Cant create Socket.\n");
    return;
    }
    // Fill in the address structure for the server address and port number...
    //================================================================================
    struct sockaddr_in saServer;
    saServer.sin_family= AF_INET;
    saServer.sin_port= htons (5000);
    saServer.sin_addr.s_addr= inet_addr ("192.168.0.126");
    // Send data to the server...
    //===============================================================================0
    strcpy (szBuf, "Hello from Client");
    nRet= sendto (theSocket, szBuf, strlen (szBuf), 0, (struct sockaddr*) &saServer, sizeof (saServer));
    // ... and check for any errors...
    if (nRet < 0) {
    printf ("\n Error in sendto function.\n");
    close (theSocket);
    return;
    }
    // Wait for server reply data...
    memset (szBuf1, 0, sizeof (szBuf1));
    //nFromLen= sizeof (struct sockaddr);
    <span style='color:red'> recvfrom (theSocket, szBuf1, sizeof(szBuf1), 0, (struct sockaddr*) &saServer, sizeof(saServer));</span>
    // ... and check for any errors...
    if (nRet < 0) {
    printf ("\n Error in recvform function.\n");
    close (theSocket);
    return;
    }
    //Umwandlung von String von controller in int werte!
    //================================================================================
    int zahl;
    zahl = atoi(szBuf1);

    //genaue ausgabe
    //================================================================================

    if (b == 0)
    {
    double m,z;

    if(zahl == 4081)
    {
    zahl = 0;
    }

    if(zahl >= 2047)
    {

    //double CH0,zahl,m,z;
    m = 20. / 4095. ;
    z = -20;
    CH0 = m*zahl+z;
    }

    else
    CH0 = (float)zahl*20/4095;
    }

    if (b == 1)
    {
    CH1 = (float)zahl*20/4095;
    }

    if (b == 2)
    {
    CH2 =(float)zahl*20/4095;
    }

    if (b == 3)
    {
    CH3 = (float)zahl*20/4095;
    }

    if(b == 4)
    {
    CH4 = (float)zahl*20/4095;
    }

    // Exit this client code...
    close (theSocket);
    }
    }
    Volgende fehler treten auf:
    main.cpp: In function `void UdpClient()':
    main.cpp:119: error: invalid conversion from `unsigned int' to `socklen_t*'
    dank euch herzlich
    blind
  • nach vielem suchen habe ich denfehler dan mal endeckt. ich danke euch für eure zeit die ihr euch genommen habt um meinen beitrag zu lesen.
    der fehler lag da drin das der compiler das letzte argument nich convertieren konnte. <_<
    der compiler braucht einen zeiger stadt eines wertes oder variable.
    habe dann einfach einen lehren zeiger erstell
    socklen_t* test;
    und diesen dann in recvfrom() als letzt variable eingebunden.
    damit war der compiler zwar nicht glücklich hat das ding dann aber compiled, mehr wollte ich nicht, und auf gefühle von compilern soll man sich ja eh nicht verlassen. :D
    naja ende gut alles gut oberfläche läuft, kommunikation läuft und alle sind zufrieden.
    blind