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);
}
Comments
Post a Comment