Need help in Client server program

dashang

Journeyman
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

BIOS Terminator
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. :)
 
OP
dashang

dashang

Journeyman
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

BIOS Terminator
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

God of Mistakes...
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.
 
OP
dashang

dashang

Journeyman
server.C program
Code:
#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
Code:
#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
 
Last edited by a moderator:
Top Bottom