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

#define MAXSIZEBUFFER 256

int main(int argc, char *argv[]) {
  int simpleSocket = 0;
  int simplePort = 0;
  int returnStatus = 0;
  struct sockaddr_in serverAddr, clientAddr;
  socklen_t serverSize, clientSize;

  char buffer[MAXSIZEBUFFER] = {'\0'};

  if (argc != 3) {
    fprintf(stderr, "Usage: %s <server> <port>\n", argv[0]);
    exit(1);
  }

  simplePort = atoi(argv[2]);

  simpleSocket = socket(AF_INET, SOCK_DGRAM, 0);

  if (simpleSocket == -1) {
    fprintf(stderr, "Could not create a socket!\n");
    exit(1);
  } else {
    printf("Socket created!\n");
  }

  memset(&clientAddr, '\0', sizeof(clientAddr));
  clientAddr.sin_family = AF_INET;
  clientAddr.sin_addr.s_addr = inet_addr(argv[1]);
  clientAddr.sin_port = htons(simplePort);

  clientSize = sizeof(clientAddr);

  printf("Inserisci un valore: ");
  scanf("%s", buffer);

  sendto(simpleSocket, buffer, strlen(buffer), 0,
         (struct sockaddr *)&clientAddr, clientSize);

  // Waiting for Echo

  memset(buffer, '\0', sizeof(buffer));

  recvfrom(simpleSocket, buffer, MAXSIZEBUFFER, 0,
           (struct sockaddr *)&serverAddr, &serverSize);

  printf("Echo from server: %s\n", buffer);

  return 0;
}