Showing posts with label simple. Show all posts
Showing posts with label simple. Show all posts

Thursday, 21 March 2013

Simple server client c code

COMPUTER NETWORK PROGRAMS(c-code)

Simple Server-client Program

server program:


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


   int main(int argc, char *argv[])
 {  

   int listenfd = 0, connfd = 0;    
   struct sockaddr_in serv_addr;  
    char sendBuff[1025];  
   time_t ticks;    
   listenfd = socket(AF_INET, SOCK_STREAM, 0);
   memset(&serv_addr, '0', sizeof(serv_addr));  
memset(sendBuff, '0', sizeof(sendBuff));    
serv_addr.sin_family = AF_INET;  
serv_addr.sin_addr = htonl(INADDR_ANY);  
serv_addr.sin_port = htons(5000);    
bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));     
  listen(listenfd, 10);     
  while(1)    
 {     
 connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);    
       ticks = time(NULL);      
   snprintf(sendBuff, sizeof(sendBuff), "%.24s\r\n", ctime(&ticks));      
   write(connfd, sendBuff, strlen(sendBuff));         close(connfd);    
     sleep(1);
 }
}

client program:


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

#include <arpa/inet.h>

#define PORT "3490" // the port client will be connecting to

#define MAXDATASIZE 100 // max number of bytes we can get at once

// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}

return &(((struct sockaddr_in6*)sa)->sin6_addr);
}

int main(int argc, char *argv[])
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct addrinfo hints, *servinfo, *p;
int rv;
char s[INET6_ADDRSTRLEN];

if (argc != 2) {
   fprintf(stderr,"usage: client hostname\n");
   exit(1);
}

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

if ((rv = getaddrinfo(argv[1], PORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}

// loop through all the results and connect to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("client: socket");
continue;
}

if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("client: connect");
continue;
}

break;
}

if (p == NULL) {
fprintf(stderr, "client: failed to connect\n");
return 2;
}

inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr),
s, sizeof s);
printf("client: connecting to %s\n", s);

freeaddrinfo(servinfo); // all done with this structure

if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
   perror("recv");
   exit(1);
}

buf[numbytes] = '\0';

printf("client: received '%s'\n",buf);

close(sockfd);

return 0;
}