#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>

void blad()
{
  perror("Blad serwera.");
  exit(1);
}

int main()
{
  int gniazdo_klienta;
  int gniazdo_serwera;
  int serwer_dlugosc;
  int klient_dlugosc;
  char znak='a';
  int test1,test2;
  struct sockaddr_in adres_serwera;
  struct sockaddr_in adres_klienta;


  //Utworzenie gniazda klienta
  test1=gniazdo_klienta=socket(AF_INET, SOCK_DGRAM,0);
  if (test1==-1) blad();

  //Zwiazanie gniazda klienta z adrese
  adres_klienta.sin_family=AF_INET;
  adres_klienta.sin_addr.s_addr=inet_addr("127.0.0.1");
  adres_klienta.sin_port=9735;
  klient_dlugosc=sizeof(adres_serwera); 
  test2=bind(gniazdo_klienta,(struct sockaddr *)&adres_klienta,klient_dlugosc);
  if (test2==-1) blad();

  //Ustalenie adresu serwera
  adres_serwera.sin_family=AF_INET;
  adres_serwera.sin_addr.s_addr=inet_addr("127.0.0.1");
  adres_serwera.sin_port=9734;
  serwer_dlugosc=sizeof(adres_serwera); 

   //Serwer wysyla klientowi zmodyfikowana wiadomosc
  sendto(gniazdo_klienta,&znak,1,0,(struct sockaddr *)&adres_serwera,serwer_dlugosc);
  printf("Wyslalem do serwera znak %c.\n",znak);

  //Serwer czeka na wiadomosc od klienta.
  recvfrom(gniazdo_klienta,&znak,1,0,(struct sockaddr *)&adres_serwera,&serwer_dlugosc);
  printf("Otrzymalem od serwera znak %c.\n",znak);

  close(gniazdo_klienta);
  exit(0);
}




