Concatenation of two strings sent from Client on the Server – [ TCP ] using C

tcpClient.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];



/**********************************/ 
 /* 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); 
 printf("Enter another 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, MAX_MSG, 0); 
 
 printf("received from server %s\n", line);
 }while(strcmp(line, "quit"));



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

 

tcpServer.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],line1[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);
 strcpy(line1,line);
 n=recv(newSd, line, MAX_MSG, 0);
 strcat(line1,line);


 printf("received from host [IP %s ,TCP port %d] : %s\n", 
 inet_ntoa(cliAddr.sin_addr), ntohs(cliAddr.sin_port), line1);
 send(newSd, line1, strlen(line1) + 1, 0);

}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);
 }
}

Leave a Reply

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