Loading

Archive for 30 Nov 2012

Client - Server Program in C - Socket Programming

Server File - 


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

#define MAX 30

int AddDigits(int number);
int Factorial(int number);
int StringLength(char str[]);
int StringCompare(char str[],char str1[]);
char* StrConcat(char str1[],char str2[]);
char* SubsString(char str1[],int start,int end);

int ssfd;
int ccfd,res;
int serverlen,clientlen;
struct sockaddr_in serveraddr;
struct sockaddr_in clientaddr;
char result[MAX];

typedef struct message
{
char msg[MAX][MAX];
char msgoutput[MAX];
int input;
int ch;
int output;
}message;


void main()
{

int msgLen;
char *ch;
ssfd=socket(AF_INET,SOCK_STREAM,0);
message *msg;
message *reply;

msg=(message*)malloc(sizeof(message));
reply=(message*)malloc(sizeof(message));

printf("\nSSFD Value:%d",ssfd);

msgLen=sizeof(message);


serveraddr.sin_family=AF_INET;
serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");

//serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
//serveraddr.sin_port = htons(9734);

serveraddr.sin_port=9734;
serverlen=sizeof(serveraddr);
bind(ssfd,(struct sockaddr*)&serveraddr,serverlen);
printf("\nConnected to socket");
listen(ssfd,5);

ccfd=accept(ssfd,(struct sockaddr*)&clientaddr,&clientlen);
printf("\nConnection accepted successfully");
while(1)
{
read(ccfd,reply,msgLen);
switch(reply->ch)
{
case 1:
reply->output=AddDigits((int)reply->input);
write(ccfd,reply,msgLen);
break;
case 2:
reply->output=Factorial((int)reply->input);
write(ccfd,reply,msgLen);

break;
case 3:
reply->output=StringLength(reply->msg[0]);
write(ccfd,reply,msgLen);

break;
case 4:
reply->output=StringCompare(reply->msg[0],reply->msg[1]);
write(ccfd,reply,msgLen);
break;

case 5:
strcpy(reply->msgoutput,StrConcat(reply->msg[0],reply->msg[1]));
write(ccfd,reply,msgLen);
break;
case 6:
reply->output=Palindrome(reply->msg[0]);
write(ccfd,reply,msgLen);
break;

case 7:
strcpy(reply->msgoutput,SubsString(reply->msg[0],reply->input,reply->output));
write(ccfd,reply,msgLen);
break;
case 8:
system("xeyes");
break;
}

}

}
int AddDigits(int number)
{
int result=0;
while(number/10!=0)
{

result+=number%10;
number=number/10;
}
result+=number%10;
return result;
}

int Factorial(int number){
int result=1,i;
for(i=1;i<=number;i++){
result*=i;
}
return result;
}

int StringLength(char str[]){
int result=0;
while(str[result]!='\0'){
result++;
}
return result;
}


//0    ===> Strings are equal....
//1    ===> Strings are not equal....
int StringCompare(char str[],char str1[])
{
int result;
int i,j;
for(i=0;i<StringLength(str);i++){
if(str[i]!=str1[i])return 1;
}
return 0;
}

//0    ===> Palindrome...
//1    ===> Not Palindrome...
int Palindrome(char str[])
{
int result;
int i,j;
for(i=0,j=strlen(str)-1;i<StringLength(str);j--,i++){
if(str[i]!=str[j])return 1;
}
return 0;
}

char* SubsString(char str1[],int start,int end){
int i,j=0;
//strcpy(result,str1);
for(i=start;i<=end;i++){
result[j++]=str1[i];
}
//result[j]='\0';
return (char*)result;

}

char* StrConcat(char str1[],char str2[])
{
int i=0,j=0;
strcpy(result,str1);
strcat(result,str2);
//printf("Result %s",result);
return (char*)result;
}


Client File -




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

#define MAX 30

typedef struct message
{
char msg[MAX][MAX];
char msgoutput[MAX];
sint input;
int ch;
int output;
}message;


void main()
{
int ssfd;
int len;
int msgLen;
struct sockaddr_in address;
int result;
FILE *fp;

char ch='A';

message *msg;
message *reply;

msg=(message*)malloc(sizeof(message));
reply=(message*)malloc(sizeof(message));
msgLen=sizeof(message);
//strcpy(msg->msg,"Aniket");

ssfd=socket(AF_INET,SOCK_STREAM,0);

address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("127.0.0.1");
address.sin_port=9734;
len=sizeof(address);

result=connect(ssfd,(struct sockaddr*)&address,len);
//fp=fdopen(ssfd,"rw");
if(result==-1){
perror("Server not found");
printf("\nError Result:%d",result);
//exit(1);
}

printf("\nConnection successful");

do{
printf("\n\nSELECT Appropriate Option:\n");
printf("\n1.\tAddition of Digits");
printf("\n2.\tFactorial of a Number");
printf("\n3.\tLength of string");
printf("\n4.\tString Comparison");
printf("\n5.\tString Concatenation");
printf("\n6.\tCheck For Palindrome");
printf("\n7.\tFind Substring.");
printf("\n8.\tRun Command");

printf("\n9.\tDisconnect And Exit");
scanf("%d",&msg->ch);
printf("Your Choice:%d",msg->ch);
//write(ssfd,msg,msgLen);
switch(msg->ch){
case 1:
printf("\nEnter Number:");
scanf("%d",&msg->input);
write(ssfd,msg,msgLen);
read(ssfd,reply,msgLen);
printf("Output from server:%d",reply->output);
break;
case 2:
printf("\nEnter Number:");
scanf("%d",&msg->input);
write(ssfd,msg,msgLen);
read(ssfd,reply,msgLen);
printf("Output from server:%d",reply->output);

break;

case 3:
printf("\nEnter any string:");
scanf("%s",msg->msg[0]);
write(ssfd,msg,msgLen);
read(ssfd,reply,msgLen);
printf("Output from server:%d",reply->output);
break;

case 4:
printf("\nEnter any First String:");
scanf("%s",msg->msg[0]);
printf("\nEnter any Second String:");
scanf("%s",msg->msg[1]);
write(ssfd,msg,msgLen);
read(ssfd,reply,msgLen);
printf("Output from server:%d",reply->output);
if(reply->output==0)
printf("\nStrings are equal...");
else
printf("\nStrings are not equal...");

break;

case 5:
printf("\nEnter any First String:");
scanf("%s",msg->msg[0]);
printf("\nEnter any Second String:");
scanf("%s",msg->msg[1]);
write(ssfd,msg,msgLen);
read(ssfd,reply,msgLen);
printf("Output from server:%s",reply->msgoutput);


break;

case 6:
printf("\nEnter any string:");
scanf("%s",msg->msg[0]);
write(ssfd,msg,msgLen);
read(ssfd,reply,msgLen);
printf("Output from server:%d",reply->output);
if(reply->output==0)
printf("\nString is a palindrome");
else
printf("\nStrings is not palindrome");

break;
case 7:
printf("\nEnter any string:");
scanf("%s",msg->msg[0]);
printf("\nEnter Start Index:");
scanf("%d",&msg->input);
printf("\nEnter End Index:");
scanf("%d",&msg->output);
write(ssfd,msg,msgLen);
read(ssfd,reply,msgLen);
printf("Output from server:%s",reply->msgoutput);
break;
case 8:
printf("\nEnter String-\"xeyes\" or other valid command:");
scanf("%s",msg->msg[0]);

write(ssfd,msg,msgLen);
system(msg->msg[0]);
read(ssfd,reply,msgLen);
break;
default:
printf("Invalid Choice....Select Another");
break;
}
}while(msg->ch!=9);

close(ssfd);
//exit(0);
}



/*
OUTPUT

desktop ~ $ gcc server.c
desktop ~ $ ./a.out

SSFD Value:3
Connected to socket


desktop ~ $ gcc -o client.out client.c
desktop ~ $ ./client.out

Connection successful

SELECT Appropriate Option:

1.    Addition of Digits
2.    Factorial of a Number
3.    Length of string
4.    String Comparison
5.    String Concatenation
6.    Check For Palindrome
7.    Find Substring.
8.    Run Command
9.    Disconnect And Exit1
Your Choice:1
Enter Number:1234
Output from server:10

SELECT Appropriate Option:

1.    Addition of Digits
2.    Factorial of a Number
3.    Length of string
4.    String Comparison
5.    String Concatenation
6.    Check For Palindrome
7.    Find Substring.
8.    Run Command
9.    Disconnect And Exit2
Your Choice:2
Enter Number:5
Output from server:120

SELECT Appropriate Option:

1.    Addition of Digits
2.    Factorial of a Number
3.    Length of string
4.    String Comparison
5.    String Concatenation
6.    Check For Palindrome
7.    Find Substring.
8.    Run Command
9.    Disconnect And Exit3
Your Choice:3
Enter any string:abc
Output from server:3

SELECT Appropriate Option:

1.    Addition of Digits
2.    Factorial of a Number
3.    Length of string
4.    String Comparison
5.    String Concatenation
6.    Check For Palindrome
7.    Find Substring.
8.    Run Command
9.    Disconnect And Exit4
Your Choice:4
Enter any First String:xyz  

Enter any Second String:xyx
Output from server:1
Strings are not equal...

SELECT Appropriate Option:

1.    Addition of Digits
2.    Factorial of a Number
3.    Length of string
4.    String Comparison
5.    String Concatenation
6.    Check For Palindrome
7.    Find Substring.
8.    Run Command
9.    Disconnect And Exit5
Your Choice:5
Enter any First String:Abc

Enter any Second String:Xyz
Output from server:AbcXyz

SELECT Appropriate Option:

1.    Addition of Digits
2.    Factorial of a Number
3.    Length of string
4.    String Comparison
5.    String Concatenation
6.    Check For Palindrome
7.    Find Substring.
8.    Run Command
9.    Disconnect And Exit6
Your Choice:6
Enter any string:malyalam
Output from server:1
Strings is not palindrome

SELECT Appropriate Option:

1.    Addition of Digits
2.    Factorial of a Number
3.    Length of string
4.    String Comparison
5.    String Concatenation
6.    Check For Palindrome
7.    Find Substring.
8.    Run Command
9.    Disconnect And Exit7
Your Choice:7
Enter any string:intelcoreigen

Enter Start Index:2

Enter End Index:5
Output from server:telc

SELECT Appropriate Option:

1.    Addition of Digits
2.    Factorial of a Number
3.    Length of string
4.    String Comparison
5.    String Concatenation
6.    Check For Palindrome
7.    Find Substring.
8.    Run Command
9.    Disconnect And Exit9

*/

Leave a comment