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;
}