#define SOCKET int
#define BOOL bool
#define HOSTENT hostent
#define SOCKADDR_IN sockaddr_in
#define ZeroMemory(p, sz) memset((p), 0, (sz))
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>
#include <netdb.h>
#include <unistd.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <iostream>
class moteur
{
public:
sockaddr remote_addr; // adres IP tego, kto nam wysyla pakiet
socklen_t addr_len;
//------------------------------------------------------
//zmienne do operacji w na oknie
volatile bool StartStop;
//------------------------------------------------------------------------------------------
//deklaracja I/O
unsigned short port; // port komunikacji
SOCKET s; // definicja gniazda
//------------------------------------------------------------------------------------------
bool onoff;
char localIP[17];
char encIP[17];
char IPstring[13];
char IPme[17];
char encstr[32];
int delay; //obie zmienne sa rowniez skladnikami klasy GraphEngine
char buf[1024];
moteur();
int net_init(void);
int net_done();
void GetLocalIP(void);
void stringIP (char *IPme);
void makeCFGString(void);
void startupCFG(void);
void sendUDP(void);
void receive();
};
void moteur::receive(){
addr_len = sizeof(remote_addr);
int ret = recvfrom(s, (char*)&(buf), sizeof(buf), 0, (struct sockaddr*)&remote_addr, &addr_len);
buf[ret] = '\0';
std::cout<<"wykonalo sie";
}
int main(int argc, char *argv[])
{
moteur silnik;
silnik.net_init();
silnik.startupCFG();
silnik.receive();
return 0;
}
moteur::moteur()
{}
int moteur::net_init(void)
{
struct sockaddr_in addr;
int ret;
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
BOOL value = 1;
ret = setsockopt(s, SOL_SOCKET, SO_BROADCAST, (const char *)&value,
sizeof(value));
ZeroMemory(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = INADDR_ANY;
if(ret = bind(s, (struct sockaddr*)&addr, sizeof(addr))!=0)std::cout<<"error\n";
else std::cout<<"ok!\n";
return 0;
}
int moteur::net_done()
{
close(s);
return 0;
}
//la fin d'emploi de réseau
void moteur::GetLocalIP()
{
char buffer[129];
gethostname(buffer,sizeof(buffer));
HOSTENT* lpHostEnt = gethostbyname(buffer);
if (lpHostEnt==NULL) strcpy(localIP, "127.0.0.1");
char *lpAddr =(char*)inet_ntoa( *(struct in_addr*)(lpHostEnt->h_addr_list));
strcpy(localIP, lpAddr);
}
void moteur::startupCFG()
{
GetLocalIP();
strcpy(encIP, localIP);
if (encIP[strlen(encIP)-1]!='7'){ encIP[strlen(encIP)-1]='7' ;}
else {encIP[strlen(encIP)-1]!='8'; }
makeCFGString();
}
Przyklad dziala poprawnie..az do momentu wywolania funkcji receive? Czy ktos spotkal sie z podobnym problemem?