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