
#include "udpClientClass.h"

udpClientClass::udpClientClass(char* server_name, int port_number ){

  /* create a socket */
  sockd = socket(AF_INET, SOCK_DGRAM, 0);
  printf("socket: %d\n", sockd);
  if (sockd == -1)
    {
      perror("Socket creation error");
      exit(1);
    }
  
  /* client address */
  my_name.sin_family = AF_INET;
  my_name.sin_addr.s_addr = INADDR_ANY;
  my_name.sin_port = 0;
  
  status = bind(sockd, (struct sockaddr*)&my_name, sizeof(my_name));
  printf("bind: %d\n", status);
  
  //added to translate server address to/from tcip
  if ((he=gethostbyname(server_name))==NULL)
    perror("gethostbyname");
  
  /* server address */ 
  serv_name.sin_family = AF_INET;
  //serv_name.sin_addr.s_addr = inet_addr(server_name); // uses ip number to resolve hostname
  serv_name.sin_addr = *((struct in_addr *) he->h_addr); 
  serv_name.sin_port = htons(port_number);

  addrlen = sizeof(serv_name);

}

void udpClientClass::sendString(char* string){
  
  //strcpy(buf, "Hello world\n");
  status = sendto(sockd, string, strlen(string)+1, 0, 
		  (struct sockaddr*)&serv_name, sizeof(serv_name));
  printf("sendto: %d\n", status);
}

int udpClientClass::recvString(char* string){
  
  
  status = recvfrom(sockd, string, MAX_BUF, 0, 
		    (struct sockaddr*)&serv_name, &addrlen);
  printf("recvfrom: %d\n", status);
  string[status] = '\n';
  
  printf("\nReceived:\n%s", string);
  return status;
}

void udpClientClass::closeSocket(){
  close(sockd);
}


