free the memory in client server program

Nov 22, 2013 at 7:03am
How to free the memory and address,value
Server:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <iostream>
#include <netdb.h>
using namespace std;
int oper(int , int ,int );
void error(const char *msg)
{
cout<<msg<<endl;
exit(1);
}

int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno;
int mynetid,mysecid;
int clientid,clientsecid;
int num,ss;
socklen_t clilen;
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2)
{
cout<<"ERROR, no port provided\n";
exit(1);
}

sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);

int yes=1;
if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1)
{
cout<<"setsockopt";
exit(1);
}

if (bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
cout<<"ERROR on binding";

listen(sockfd,5);

clilen = sizeof(cli_addr);

socckfd = accept(sockfd,(struct sockaddr *) &cli_addr,&clilen);
if (newsockfd < 0)
cout<<"ERROR on accept";

recv(newsockfd,&mynetid,4,0);
clientid=mynetid;
cout<<"First value is :\t"<<clientid<<endl;
recv(newsockfd,&mysecid,4,0);
clientsecid=mysecid;
cout<<"Second value is :\t"<<clientsecid<<endl;
recv(newsockfd,&num,4,0);
ss=num;
int mm;

mm=oper(clientid,clientsecid,ss);

cout<<"Result was sent :\t"<<mm<<endl;
send(newsockfd,&mm,4,0);

//bzero((char *) &serv_addr, sizeof(serv_addr));
close(newsockfd);
close(sockfd);
return 0;
}
int oper(int a,int b,int c)
{
int aaa,cliid,clisecid,opt;
cliid=a;clisecid=b;opt=c;
aaa=0;
switch(opt)
{
case 1:
aaa=cliid+clisecid;
return aaa;
break;
case 2:
aaa=cliid-clisecid;
return aaa;
break;
case 3:
aaa=cliid*clisecid;
return aaa;
break;
case 4:
aaa=cliid/clisecid;
return aaa;
break;
default:
cout<<"bye";
}
return 0;
}


Client:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <iostream>
using namespace std;
void error(const char *msg)
{
cout<<msg<<endl;
exit(0);
}

int main(int argc, char *argv[])
{
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
int mynetid,mysecid,nn,mm;
if (argc < 3)
{
cout<<"usage %s hostname port\n"<< argv[0]<<endl;
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
cout<<"ERROR opening socket";
server = gethostbyname(argv[1]);
if (server == NULL)
{
cout<<"ERROR, no such host\n";
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
{
cout<<"ERROR connecting\n";
exit(0);
}
cout<<"Enter first value :\t";
cin>>mynetid;
cout<<"Enter second value :\t";
cin>>mysecid;
send(sockfd,(const char*)&mynetid,4,0);
send(sockfd,(const char*)&mysecid,4,0) ;
cout<<"Select the option\n1.Addition\n2.Sub\n3.Mul\n4.Div\n5.Exit\n";
cin>>nn;
send(sockfd,(const char*)&nn,4,0);
recv(sockfd,&mm,4,0);
cout<<"Result is : "<<mm<<"\n";
close(sockfd);
return 0;
}
Last edited on Nov 22, 2013 at 7:04am
Nov 22, 2013 at 9:50am
I don't see any allocation. What memory are you talking about?

Also, please use the code format tag (in the palette) to format your code.
Topic archived. No new replies allowed.