TCP Echo Server – Echo Client Program using C

tcpechoServer.c

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

#define MAX_MSG 100
#define SERVER_ADDR "127.0.0.1"
#define SERVER_PORT 3786



main ( ) {

int sd, newSd, cliLen, n;

struct sockaddr_in cliAddr, servAddr;
 char line[MAX_MSG], line_r[MAX_MSG];



/**********************************/ 
 /* build server address structure */
 /**********************************/

bzero((char *)&servAddr, sizeof(servAddr));
 servAddr.sin_family = AF_INET;
 servAddr.sin_addr.s_addr = inet_addr(SERVER_ADDR);
 servAddr.sin_port = htons(SERVER_PORT);

/*
 bzero((char *)&servAddr, sizeof(servAddr));
 servAddr.sin_family = AF_INET;
 inet_aton(SERVER_ADDR, &servAddr.sin_addr);
 servAddr.sin_port = htons(SERVER_PORT);
*/



/************************/ 
 /* create stream socket */
 /************************/

sd = socket(AF_INET, SOCK_STREAM, 0);
 printf("successfully created stream socket \n");

/**************************/ 
 /* bind local port number */
 /**************************/

bind(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));
 printf("bound local port successfully\n");



/********************************/ 
 /* specify number of concurrent */
 /* clients to listen for */
 /********************************/

listen(sd,5);



while(1) {

printf("waiting for client connection on port TCP %u\n",SERVER_PORT);

/*****************************/
 /* wait for client connection*/
 /*****************************/

cliLen = sizeof(cliAddr);
 newSd = accept(sd, (struct sockaddr *) &cliAddr, &cliLen);

printf("received connection from host [IP %s ,TCP port %d]\n",
 inet_ntoa(cliAddr.sin_addr), ntohs(cliAddr.sin_port));

/*****************************/
 /* wait for data from client */
 /*****************************/ 
 
 do{
 memset(line,0x0,MAX_MSG);
 
 n=recv(newSd, line, MAX_MSG, 0);
 line[n]='\n';
 
 printf("received from host [IP %s ,TCP port %d] : %s\n", 
 inet_ntoa(cliAddr.sin_addr), ntohs(cliAddr.sin_port), line);
 
 strcpy(line_r,line);
 send(newSd, line_r, strlen(line_r) + 1, 0);
 printf("data echoed (%s)\n", line_r);

}while(abs(strcmp(line, "quit")));



/**************************/
 /* close client connection*/
 /**************************/

printf("closing connection with host [IP %s ,TCP port %d]\n",
 inet_ntoa(cliAddr.sin_addr), ntohs(cliAddr.sin_port));

close(newSd);
 }
}

tcpechoClient.c

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



#define MAX_MSG 100
#define SERVER_ADDR "127.0.0.1"
#define CLIENT_ADDR "127.0.0.1"
#define SERVER_PORT 3786
#define CLIENT_PORT 8229

main () {

int sd, rc, i, n;
 struct sockaddr_in clientAddr, servAddr;
 char line[MAX_MSG],line_r[MAX_MSG];



/**********************************/ 
 /* build server address structure */
 /**********************************/

bzero((char *)&servAddr, sizeof(servAddr));
 servAddr.sin_family = AF_INET;
 servAddr.sin_addr.s_addr = inet_addr(SERVER_ADDR);
 servAddr.sin_port = htons(SERVER_PORT);

/*
 bzero((char *)&servAddr, sizeof(servAddr));
 servAddr.sin_family = AF_INET;
 inet_aton(SERVER_ADDR, &servAddr.sin_addr);
 servAddr.sin_port = htons(SERVER_PORT);
*/

/**********************************/ 
 /* build client address structure */
 /**********************************/

bzero((char *)&clientAddr, sizeof(clientAddr));
 clientAddr.sin_family = AF_INET;
 clientAddr.sin_addr.s_addr = INADDR_ANY;
 clientAddr.sin_port = htons(0);

/*
 bzero((char *)&clientAddr, sizeof(clientAddr));
 clientAddr.sin_family = AF_INET;
 clientAddr.sin_addr.s_addr = inet_addr(CLIENT_ADDR);
 clientAddr.sin_port = htons(CLIENT_PORT);
*/

/************************/ 
 /* create stream socket */
 /************************/

sd = socket(AF_INET, SOCK_STREAM, 0);
 printf("successfully created stream socket \n");

/**************************/ 
 /* bind local port number */
 /**************************/

bind(sd, (struct sockaddr *) &clientAddr, sizeof(clientAddr));
 printf("bound local port successfully\n");
 
 /*********************/ 
 /* connect to server */
 /*********************/

connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));
 printf("connected to server successfully\n");

/***********************/
 /* send data to server */
 /***********************/

do{
 printf("Enter string to send to server : ");
 scanf("%s", line);

send(sd, line, strlen(line) + 1, 0);
 printf("data sent (%s)\n", line); 
 n=recv(sd, line_r, MAX_MSG, 0);
 line_r[n]='\n';
 
 printf("received from server [IP %s ,TCP port %d] : %s\n", 
 inet_ntoa(servAddr.sin_addr), ntohs(servAddr.sin_port), line_r);
 }while(strcmp(line, "quit"));



printf("closing connection with the server\n");
 close(sd);
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *