UDP Client & Server

#include <iostream>
#include <sys/socket.h>
#include <netdb.h>

#define BUFSIZE 1000
using namespace std;

UDP Server:

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

UDP Client:

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);
}
 
socket_udp.txt · Last modified: 31.03.2010 17:51 (external edit)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki