0 Daumen
321 Aufrufe

Und zwar werde ich von der Uni einen Wlan-fähigen Beschleunigungssensor bekommen. Dieses Gerät soll ich mittels einen TCP.IP Clienten mit meinem PC verbinden, die Daten in eine Datenbank einspeisen und auswerten.

Leider scheitert es aber schon an der Verbindung. Gefühlt habe ich nach jedem Tutorial weniger Ahnung als vorher.

Ich habe einfach mal ein Tutorial durchgearbeitet und den Code so umgeschrieben wie ich ihn brauche (und mit Kommentaren versehen, wie ich ihn verstanden habe).

Falls jemand Zeit und Lust hat, kann er sich den Code mal anschauen und mir Feedback geben ob ich auf einem guten Weg bin, oder ob ich das Projekt löschen kann und nochmal von 0 beginnen kann.

Da ich den Sensor noch nicht habe, kann ich den Code leider noch nicht direkt am Sensor testen (was aber egal ist, weil er sowieso noch Fehlermeldungen ausspuckt).

/*
Informatiklabor SS2018 Projekt RC-Car
* Code& Dokumentation
*
* Ziel:
* Beschleunigungsdaten eines Sensors (mit Wlan-Funktion) zu lesen,
* in eine Datenbank einzuspeisen und zu verarbeiten.
*
* Vorgehen:
* 1. Verbindung mit dem Sensor mittels eines TCP-Klienten
*  1a) Einen "Socket" erstellen
*  1b) Den Socket mit dem Sensor mittels Ip.Adresse&Port verbinden
*  1c) Daten vom Sensor empfangen
* 2.Daten des Sensors mittels MY.SQL, an eine Datenbank, schicken
* 3. Daten Auswerten (Graphisch, Excel?)
*
*
*/



#include <cstdlib>
#include <iostream>
#include<stdio.h> //Primär für input output Befehle
#include <sys/types.h> //Definiert viele Datentypen
#include <sys/socket.h> //Definiert Strukturen, die man
                          //für Sockets braucht
#include <netinet/in.h> //Beinhaltet Strukturen die man
                        // für Internetdomain-adressen benötigt
#include <netdb.h> //Brauchen wir für "hostent"
// lieber zu viele Bibliotheken als zu wenig

using namespace std;

/*
*
*/

void error(char *msg)
{
    perror(msg);
    exit(0);
}

/*
* Der Code sagt aus:
* Falls Error, dann wird eine Char, nämlich "msg" ausgegeben
* "msg" beinhaltet "perror"
* perror, zeigt den letzten Fehler an.
* Danach schließt das Prog. durch "exit(0)"
*/

int main(int argc, char *argv[]) {
    /*
    Hier geht unser Programm los.
    Das Programm gibt am Ende die Variable
    "argc" als Ganzzahl
    &
    argv als Text aus
    * -> argv beinhaltet die Informationen des Servers
    * mit dem wir kommunizieren
    */
   
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;
   
    /*
    Hier definieren wir viele ganzzahlige Variablen
    * sockfd -> Desktiptor für ???
    * & porto -> Speichert die Port Nr. unserer Verbindung
    * & n -> Speichert die Anzahl der Buchstaben die wir empfangen
    *
    * Sowie die Strukturen
    * SockAddr-> Enthält die Informationen der Inet Adresse mit der wir usn verbinden
    *            Ist in der library <netinet/in.h>
    * serv_addr -> Adresse des Serves von dem wir Daten empfangen
    * & hostent
    */
   
   
    if (argc < 3) {
      fprintf(stderr,"usage %s hostname port\n", argv[0]);
      exit(0);
     
      //???
    }
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    /*
    * In der Zeile krieren wir den Socket mittels socket(...)
    * Es gibt 3 Bestandteile:
    * 1: Adress Domain (AfInet)
    * 2: Typ unseres Sockets(Hier SOCK_Stream)
    *    d.h, dass wir einen Stream an Daten haben
    * 3: Rückgabe in Integer Form,
    *    Falls die Verbindung scheitert wird minus 1 ausgegeben
    */
   
   
    if (sockfd < 0)
        error("ERROR opening socket");
    /*
    Falls die Variable -1 ist, dann "<0" erfüllt und error
    */
   
    server = gethostbyname(argv[1]);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
       
        /*
        (argv[1]) beinhaltet die Informationen des Servers
        * Falls unser Client den Server(Host) mit den Daten
        * nicht findet, wird "NULL" ausgegeben.
        * Unser Programm wird beendet.
        */
       
       
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr,
        (char *)&serv_addr.sin_addr.s_addr,
        server->h_length);
    serv_addr.sin_port = htons(portno);
    /* Hier müsste man die Ip und den Port
    * eingeben, aber wo*/
    }
   
        if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
        error("ERROR connecting");
   
    /*
    Falls mit den Daten keine Verbindung aufgestellt
    * werden kann, wird minus 1 ausgegeben und eine Error-
    * meldung
    */
   
   
    return 0;
}


Avatar von

1 Antwort

0 Daumen
 
Beste Antwort


Die grundlegende Vorgehensweise, die Du in dem Kommentar beschreibst, ist sinnvoll.

Für die Einbindung des Beschleunidunggsensors liegen mir zu wenige Daten vor (wie auch in Deinem anderen Post).

Ich würde mich an Deiner Stelle bei der Socket-Programmierung an dieses Tutorial halten. Das habe ich damals auch für unser Netzwerk-Projekt verwendet.

Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community