/*****************************************************************************/
/* Simple TCP client */
/* */
/* The client get the following input: */
/* * Address / name of the host which runs the server */
/* */
/* */
/* Process: */
/* The clients resolves server name (no resolution is needed for address) */
/* Conenction with the server */
/* Passing the message to the server */
/* */
/* Termination: */
/* Close the connection as needed */
/* */
/* */
/* */
/* The source is taken from Beej's Guide to Network Programming */
/* */
/* */
/* */
/*****************************************************************************/
void signal_pipe(int signo);
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <signal.h>
#define PORT 3490 /* the port client will be connecting to */
#define MAXDATASIZE 100 /* max number of bytes we can get at once */
int main(int argc, char *argv[])
{
int sockfd, numbytes; /*Socket file descriptor & bystes sent */
char buf[MAXDATASIZE]; /*The string to be passed */
struct hostent *he; /*Is needed for address resolution */
struct sockaddr_in their_addr; /* connector's address information */
if (argc != 2) { /*If not enaugh parameters were passed */
fprintf(stderr,"usage: client hostname\n");
exit(1);
}
if ((he=gethostbyname(argv[1])) == NULL) { /* Host name resolution */
herror("gethostbyname");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { /*Define the Internet socket,TCP*/
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); /*Assign address of the server */
bzero(&(their_addr.sin_zero), 8); /*Zero the rest of the struct */
/*Connecting the server */
signal (SIGPIPE, signal_pipe);
if (connect(sockfd, (struct sockaddr *)&their_addr, \
sizeof(struct sockaddr)) == -1) {
perror("connect");
exit(1);
}
while(1){
if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1) {/*Recieve infor from the server*/
perror("recv");
exit(1);
}
buf[numbytes] = '\0'; /*The info from the server has no \0 at the end of string */
printf("Received: %s",buf);
if (send(sockfd, "Hello-client!\n", 14, 0) == -1){
perror("send");
exit(0);
}
}
close(sockfd);
return 0;
}
void signal_pipe(int signo)
{
printf("INTERUPT signal - SIGPIPE\n");
return;
}