URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8276
[ Назад ]

Исходное сообщение
" помогите написать несложную программку :)"

Отправлено albina , 22-Май-09 18:09 
Всем приветик!)))
обращаюсь ко всем кто может помочь, кто не может просьба не отписывать всякие подколки ;)
в общем мне надо написать простенькую программку:
"клиент принимает с клавиатуры команды и передает их серверу. сервер выполняет приянтые команды и возварщает результаты их выполнения клиента. принимаемые данные клиент выводит на терминао. программы запускать на разных терминалах"
пожалуйста помогите очень срочно надо!

Содержание

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

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


" помогите написать несложную программку :)"
Отправлено albina , 22-Май-09 18:46 
>Сессия подкралась незаметно?
>Если уж Вы недостаточно образованы, чтобы написать, что то самой\самому, то хотя
>бы потрудитесь написать нормальное описание для программы.

ну вобщем такое задание мне дали, как есть написала, если что то непонятно отвечу
ну а так... есть 2 терминала один клиент а другой  сервер в клиенте вводятся простенькие команды типа ps -l они отсылаются на сервер там они выполняются и результаты возвращаются клиенту, принятые данные он выводит на терминал


" помогите написать несложную программку :)"
Отправлено Владимир , 22-Май-09 19:55 
Если я правильно понял вопрос, то выша задача описана на http://www.kgtu.runnet.ru/WD/TUTOR/tcpip/netprg1.html, надо немного поправить. А вообще в инете полно решений данной задачи, надо лишь поискать.


" помогите написать несложную программку :)"
Отправлено Pahanivo , 22-Май-09 21:08 
>Если я правильно понял вопрос, то выша задача описана на http://www.kgtu.runnet.ru/WD/TUTOR/tcpip/netprg1.html, надо
>немного поправить. А вообще в инете полно решений данной задачи, надо
>лишь поискать.

ага )
putty <-> sshd


" помогите написать несложную программку :)"
Отправлено dont , 22-Май-09 21:55 
>>Сессия подкралась незаметно?
>>Если уж Вы недостаточно образованы, чтобы написать, что то самой\самому, то хотя
>>бы потрудитесь написать нормальное описание для программы.
>
>ну вобщем такое задание мне дали, как есть написала, если что то
>непонятно отвечу
>ну а так... есть 2 терминала один клиент а другой  сервер
>в клиенте вводятся простенькие команды типа ps -l они отсылаются на
>сервер там они выполняются и результаты возвращаются клиенту, принятые данные он
>выводит на терминал

Устанавливаете на сервере sshd.
На клиенте генерируете ключ для входа без пароля.
Ну и потом выполняете:
ssh <user>@<server> 'df -h'
Оформляете это в скрипт, который будет запрашивать команды.

"df -h" - в даном случае покажет свободное место. Подставляйте какие угодно команды.


" помогите написать несложную программку :)"
Отправлено Аноним , 22-Май-09 22:07 
>Устанавливаете на сервере sshd.
>На клиенте генерируете ключ для входа без пароля.

Можно и без ключей, всавлять пароли expect-ом.
http://bash.cyberciti.biz/security/expect-ssh-login-script/


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

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


" помогите написать несложную программку :)"
Отправлено Vladyslav Lazarenko , 28-Май-09 21:08 
>Советую посмотреть boost::aio

asio


" помогите написать несложную программку :)"
Отправлено RomanCh , 27-Май-09 15:18 
Могу помочь. За некоторое вознаграждение ;-)

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

Вот сарцы: сервер :
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#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;
}