/* client.c -- a stream socket client demo */

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

#define PORT 3490       // porta de ligação
#define MAXDATASIZE 100 // num. max de bytes no buffer

int main(int argc, char *argv[])
{
   int sockfd, numbytes;  
   char buf[MAXDATASIZE];
   struct hostent *he;
   struct sockaddr_in cl_addr, server_addr; // info do endereço de ligação

   if (argc != 2) {
     fprintf(stderr,"usar: client hostname\n");
     exit(1);
   }

   if ((he=gethostbyname(argv[1])) == NULL) {  // host info 
     perror("gethostbyname");
     exit(1);
   }

   if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
     perror("socket");
     exit(1);
   }

   cl_addr.sin_family = AF_INET;    // network byte order
   cl_addr.sin_port = htons(PORT);  // short
   cl_addr.sin_addr = *((struct in_addr *)he->h_addr);
   memset(&(cl_addr.sin_zero), '\0', 8);  // resto da estrutura a zero
   server_addr = cl_addr;
   if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) {
     perror("connect");
     exit(1);
   }

   if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
     perror("recv");
     exit(1);
   }
   buf[numbytes] = '\0';
   printf("Recebeu: %s",buf);
   close(sockfd);
   return 0;
}
