# Need help in Client server program



## dashang (Dec 25, 2011)

I want to implement a program in linux using c/c++ to implement client server architecture using pocket programming. It should be such that when a user
 Stores a file on server the server slits the file and stores it on 2 or more server. Whenever user retrieves the file, the server retrieves the file again from different server forwards all the fragments to the user and display it in single file.

Please reply


----------



## nims11 (Dec 25, 2011)

dashang said:


> I want to implement a program in linux using c/c++ to implement client server architecture using *pocket programming*. It should be such that when a user
> Stores a file on server the server slits the file and stores it on 2 or more server. Whenever user retrieves the file, the server retrieves the file again from different server forwards all the fragments to the user and display it in single file.
> 
> Please reply



that's *socket programming* 

use socket() and connect() calls. here is an excellent tut Linux Howtos: C/C++ -> Sockets Tutorial
splitting and joining is easy file handling problem.


----------



## umeshtangnu (Dec 26, 2011)

google for beej's


----------



## dashang (Dec 26, 2011)

guys but what about 
"user stores a file on server the server slits the file and stores it on 2 or more server." Please help in this.
        If possible can you code it for me because i dont know anything about socket and our professors are recklesss. they just say do it , they dont teach also


----------



## nims11 (Dec 26, 2011)

dashang said:


> guys but what about
> "user stores a file on server the server slits the file and stores it on 2 or more server." Please help in this.
> If possible can you code it for me because i dont know anything about socket and our professors are recklesss. they just say do it , *they dont teach also*



this is the case in all(most) colleges in India. so get used to it.

At least first go through that link i have given. it has very well explained sockets under Linux. Then attempt the  program and if you face any problems, we are here to help.


----------



## Garbage (Dec 26, 2011)

First try to code simple program which stores a single file using the tutorial mentioned by nims11. Then post the code. Other members might help you in further coding.


----------



## dashang (Jan 7, 2012)

server.C program

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

void error(const char *msg)
{
    perror(msg);
    exit(1);
}

int main(int argc, char *argv[])
{
     int sockfd, newsockfd, portno;
     socklen_t clilen;
     char buffer[256];
     struct sockaddr_in serv_addr, cli_addr;
     int n;
     if (argc < 2) {
         fprintf(stderr,"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);
     if (bind(sockfd, (struct sockaddr *) &serv_addr,
              sizeof(serv_addr)) < 0) 
              error("ERROR on binding");
     listen(sockfd,5);
     clilen = sizeof(cli_addr);
     newsockfd = accept(sockfd, 
                 (struct sockaddr *) &cli_addr, 
                 &clilen);
     if (newsockfd < 0) 
          error("ERROR on accept");
     bzero(buffer,256);
     n = read(newsockfd,buffer,255);
     if (n < 0) error("ERROR reading from socket");
     printf("Here is the message: %s\n",buffer);
     n = write(newsockfd,"I got your message",18);
     if (n < 0) error("ERROR writing to socket");
     close(newsockfd);
     close(sockfd);
     return 0; 
}
```

client.C

```
#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> 

void error(const char *msg)
{
    perror(msg);
    exit(0);
}

int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    if (argc < 3) {
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    }
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    server = gethostbyname(argv[1]);
    if (server == NULL) {
        fprintf(stderr,"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) 
        error("ERROR connecting");
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    n = write(sockfd,buffer,strlen(buffer));
    if (n < 0) 
         error("ERROR writing to socket");
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0) 
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    close(sockfd);
    return 0;
}
```

now what to do , i want client to uplload file and server shud split it and send to other server and when user retrieves server should combine the parts and send to user


----------

