You are on page 1of 2

#include

#include
#include
#include
#include
#include
#include
#include
#include
#include

<errno.h>
<stdarg.h>
<stdio.h>
<stdlib.h>
<string.h>
<unistd.h>
<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>

/* Port na kome se odvija komunikacija. */


#define PORT 9999
/* Velicina bafera. */
#define BUFFER_SIZE 80
static char *program;

/* Ime programa. */

/* Funkcija do_work() obavlja komunikaciju sa serverom. */


static void do_work (int client, struct sockaddr *address, socklen_t length);
/* Funkcija error_fatal() ispisuje poruku o gresci i potom prekida program. */
static void error_fatal (char *format, ...);
/* Klijent program za jednu implementaciju daytime servisa. */
int
main (int argc, char **argv)
{
int server;
/* Deskriptor konekcije sa serverom. */
struct sockaddr_in address; /* Adresa servera. */
/* Proverava se da u komandnoj liniji imaju tacno dva argumenta. */
if (argc != 2)
error_fatal ("%s usage: %s host\n", argv[0], argv[0]);
/*
* Inicijalizuje se globalna promenljiva koja predstavlja ime
* programa.
*/
program = argv[0];
/* Kreira se socket za komunikaciju sa serverom. */
if ((server = socket (PF_INET, SOCK_DGRAM, 0)) < 0)
error_fatal ("%s socket() error: %s\n", argv[0], strerror (errno));
/* Formira se adresa servera. */
bzero (&address, sizeof (struct sockaddr_in));
address.sin_family = AF_INET;
address.sin_port = htons (PORT);
if (inet_pton (AF_INET, argv[1], &address.sin_addr) <= 0)
error_fatal ("%s inet_pton() error: %s\n", argv[0], strerror (errno));
/* Obavlja se komunikacija sa serverom. */
do_work (server, (struct sockaddr *) &address, sizeof (struct sockaddr_in));
/* Program se zavrsava. */
exit (EXIT_SUCCESS);
}

void
do_work (int server, struct sockaddr *address, socklen_t length)
{
char buffer[BUFFER_SIZE];
/* Bafer za razmenu poruka
* sa serverom. */
int count;
/* Duzina poruke. */
if (sendto (server, NULL, 0, 0, address, length) != 0)
error_fatal ("%s sendto() error\n", program);
/* ...a zatim ocitava odgovor od servera... */
if ((count = recvfrom (server, buffer, BUFFER_SIZE - 1, 0, NULL, NULL)) < 0)
error_fatal ("%s recvfrom() error\n", program);
buffer[count] = 0;
/* ...i ispisuje na standardni izlaz. */
if (fputs (buffer, stdout) == EOF)
error_fatal ("%s fputs() error: %s\n", program, strerror (errno));
}
static void
error_fatal (char *format, ...)
{
va_list arguments;
/* Lista argumenata funkcije. */
/* Stampa se string predstavljen argumentima funkcije. */
va_start (arguments, format);
vfprintf (stderr, format, arguments);
va_end (arguments);
/* Prekida se program. */
exit (EXIT_FAILURE);
}

You might also like