#include <iostream> #include <sys/socket.h> #include <netdb.h> #define BUFSIZE 1000 using namespace std;
int server(void)
{
int port = 333;
sockaddr_in sockName;
sockaddr_in clientInfo;
int mySocket;
char buf[BUFSIZE];
int size;
socklen_t addrlen;
if ((mySocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{ cerr << "Nie je mozne vytvorit soket\n" << strerror(errno) << endl; return(-1); }
sockName.sin_family = AF_INET;
sockName.sin_port = htons(port);
sockName.sin_addr.s_addr = INADDR_ANY;
if (bind(mySocket, (sockaddr*)&sockName, sizeof(sockName)) == -1)
{ cerr << "Problem s pomenovanim soketu\n" << strerror(errno) << endl; return(-1); }
addrlen = sizeof(clientInfo);
if ((size = recvfrom(mySocket, buf, BUFSIZE - 1, 0, (sockaddr*)&clientInfo, &addrlen)) == -1)
{ cerr << "Nepodarilo sa prijat data\n" << strerror(errno) << endl; return(-1); }
buf[size] = '\0';
cout << buf << endl;
close(mySocket);
return(0);
}
int client(void)
{
int port = 333;
char *hostname = "localhost";
char *text = "Ahoy\n";
hostent *host;
sockaddr_in serverSock;
int mySocket;
if((mySocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{ cerr << "Nie je mozne vytvorit soket" << strerror(errno) << endl; return(-1); }
// Ak chceme broadcast-ovat
int tmp = 1;
if(setsockopt(mySocket, SOL_SOCKET, SO_BROADCAST, &tmp, sizeof(tmp)) == -1)
{ cerr << "Nie je mozne povolit broadcast!" << strerror(errno) << endl; return(-1); }
if ((host = gethostbyname(hostname)) == NULL)
{ cerr << "Nespravna adresa" << strerror(errno) << endl; return -1; }
serverSock.sin_family = AF_INET;
serverSock.sin_port = htons(port);
memcpy(&(serverSock.sin_addr), host->h_addr_list[0], host->h_length);
if(sendto(mySocket, text, strlen(text), 0, (sockaddr*)&serverSock, sizeof(serverSock)) == -1)
{ cerr << "Nepodarilo sa odoslat data" << strerror(errno) << endl; return(-1); }
close(mySocket);
return(0);
}