The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
помогите написать несложную программку :), !*! albina, 22-Май-09, 18:09  [смотреть все]
Всем приветик!)))
обращаюсь ко всем кто может помочь, кто не может просьба не отписывать всякие подколки ;)
в общем мне надо написать простенькую программку:
"клиент принимает с клавиатуры команды и передает их серверу. сервер выполняет приянтые команды и возварщает результаты их выполнения клиента. принимаемые данные клиент выводит на терминао. программы запускать на разных терминалах"
пожалуйста помогите очень срочно надо!
  • помогите написать несложную программку :), !*! 2Nike, 18:31 , 22-Май-09 (1)
    >Всем приветик!)))
    >обращаюсь ко всем кто может помочь, кто не может просьба не отписывать
    >всякие подколки ;)
    >в общем мне надо написать простенькую программку:
    >"клиент принимает с клавиатуры команды и передает их серверу. сервер выполняет приянтые
    >команды и возварщает результаты их выполнения клиента. принимаемые данные клиент выводит
    >на терминао. программы запускать на разных терминалах"
    >пожалуйста помогите очень срочно надо!

    Сессия подкралась незаметно?
    Если уж Вы недостаточно образованы, чтобы написать, что то самой\самому, то хотя бы потрудитесь написать нормальное описание для программы.

  • помогите написать несложную программку :), !*! аноним, 00:26 , 27-Май-09 (7)
    >пожалуйста помогите очень срочно надо!

    Советую посмотреть boost::aio

  • помогите написать несложную программку :), !*! RomanCh, 15:18 , 27-Май-09 (8)
    Могу помочь. За некоторое вознаграждение ;-)
  • помогите написать несложную программку :), !*! Alex.vL, 02:50 , 29-Май-09 (10)
    >Всем приветик!)))
    >обращаюсь ко всем кто может помочь, кто не может просьба не отписывать
    >всякие подколки ;)
    >в общем мне надо написать простенькую программку:
    >"клиент принимает с клавиатуры команды и передает их серверу. сервер выполняет приянтые
    >команды и возварщает результаты их выполнения клиента. принимаемые данные клиент выводит
    >на терминао. программы запускать на разных терминалах"
    >пожалуйста помогите очень срочно надо!

    Вот сарцы: сервер :
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>

    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <sys/wait.h>
    #include <sys/types.h>


    void
    process_client(int nsfd)
    {
        int pid,di=0;
        char input[1024];
        FILE *p1;
        
        pid = fork();
        if(pid>0)      return ;
        if(pid<0)  {perror(" fork() error"); return ;  }

        // child
        bzero(input, sizeof(input));
        while(1)
        {
            char ch;
            int rv;
            rv = recv(nsfd, &ch, 1, 0);
            if(rv<=0)
            {
                shutdown(nsfd, SHUT_RDWR);
                close(nsfd);
                exit(0);
            }
            
            if(ch=='\n') break;
                
            input[di++] = ch;
        }
        
        p1 = popen(input, "r");
        while(1)
        {
            char line[1024];
            char *rptr;
            int rv;
            // read line from command
            bzero(line, sizeof(line));
            rptr = fgets(line, sizeof(line)-1, p1);
            if(rptr == NULL) break;
            
            // write line to socket
            rv = send(nsfd, line, strlen(line),0);
            if(rv<=0) break;
        }
        shutdown(nsfd, SHUT_RDWR);
        close(nsfd);
        exit(1);
    }

    void
    sig_chld_proc(int sig)
    {
        waitpid(-1, NULL, WNOHANG);
    }

    int
    main()
    {
        int sfd;
        int rv;
        struct sockaddr_in local;
        
        local.sin_family = AF_INET;
        local.sin_port   = htons(1516);
        local.sin_addr.s_addr   = INADDR_ANY;
        
        
        sfd = socket(AF_INET, SOCK_STREAM, 0);
        if(sfd<0) {perror(" socket() error..."); exit(1); }
        
        rv = 1;
        setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &rv, sizeof(rv));
        
        rv = bind(sfd, (void*)&local, sizeof(local));
        if(rv< 0) { perror(" bind() error..."); exit(1); }
        
        rv = listen(sfd, 5);
        if(rv< 0) { perror(" listen() error..."); exit(1); }

        signal(SIGCHLD, sig_chld_proc);
        
        while(1)
        {
            int nsfd;
            nsfd = accept(sfd, NULL, NULL);
            if(nsfd <0 ) { perror(" accept() error .. continue.");  continue; }
            process_client(nsfd);
            close(nsfd);
        }
    }
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Клиент :
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>

    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>

    int
    main()
    {
        int sfd;
        struct sockaddr_in remote;
        
        remote.sin_family = AF_INET;
        remote.sin_port   = htons(1516);
        remote.sin_addr.s_addr   = inet_addr("127.0.0.1");
        
        while(1)
        {
            char * in_ptr = NULL;
            int rv;
            char input_buff[2048];
            
            sfd = socket(AF_INET, SOCK_STREAM, 0);
            if(sfd< 0) {perror(" socket() faield..."); exit(1); }
        
            rv = connect(sfd, (void*)&remote, sizeof(remote));
            if(rv< 0) { perror(" connect failed.."); exit(1); }
            printf("Connected .. \n");
            printf(" Input command #");
            
            in_ptr = fgets(input_buff, sizeof(input_buff), stdin);
            if(in_ptr  == NULL ){
                perror("fgets() failed...");
                break;
            }
            printf("DBG: send cmd: %s", in_ptr);
            
            rv = send(sfd, in_ptr, strlen(in_ptr), 0);
            if(rv<0) {
                perror("send faield... ");
                break;
            }
            printf("DBG: %d bytes sent...\n", rv);
            fflush(stdout);
            
            while(1)
            {
                int rv;
                char input_buffer[1024];
                bzero(input_buffer, sizeof(input_buffer));        
                rv = recv(sfd, input_buffer, sizeof(input_buffer), 0);
                if(rv<=0)
                break;
                puts(input_buffer);
            }
            fflush(stdout);
            shutdown(sfd, SHUT_RDWR);
            close(sfd);
        }
        return 0;
    }





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру