All pastes #13088 Raw Edit

Anonymous

public text v1 · immutable
#13088 ·published 2005-06-01 08:40 UTC
rendered paste body
#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 5842 // the port client will be connecting to

#define MAXDATASIZE 4 // max number of bytes we can get at once

int main(int argc, char *argv[]) {

   int sockfd;
   unsigned int buf[4];
   struct hostent *he;
   struct sockaddr_in their_addr; // connector's address information
   memset(&their_addr, 0, sizeof(their_addr));

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

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

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

   their_addr.sin_family = AF_INET;    // host byte order
   their_addr.sin_port = htons(PORT);  // short, network byte order
   their_addr.sin_addr = *((struct in_addr *)he->h_addr);

   if (connect(sockfd, (struct sockaddr *)&their_addr,
      sizeof(struct sockaddr)) == -1) {
      perror("connect");
      exit(1);
   }

   unsigned int total = 0;
   recv(sockfd, (char *)&buf[0], MAXDATASIZE, 0);
   recv(sockfd, (char *)&buf[0], MAXDATASIZE, 0);
   recv(sockfd, (char *)&buf[0], MAXDATASIZE, 0);
   recv(sockfd, (char *)&buf[0], MAXDATASIZE, 0);
   total = buf[0] + buf[1] + buf[2] + buf[3];
   send(sockfd, (char *)&total, sizeof(total), 0);
   printf("Total is: %u\n", total);

   char recvbuf[1155];
   recv(sockfd, recvbuf, sizeof(recvbuf), 0);
   printf("%s\n", recvbuf);

   close(sockfd);

   return 0;
}