Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Передача данных из клиента в сервер


Автор: Anark1 12.12.2009, 21:26
Добрый вечер,
стоит задача передать набор данных из клиента на сервер, "клиент" и "сервер" - названия формальные, так как обе программы работают на одной машине. Для этого клиентом создается неименованный канал, пишутся в него данные, далее клиент отправляет серверу сообщение с идентификаторами созданного канала. 
Данные в канал пишутся, идентификаторы передаются, однако сервер читать не желает.

Код

//CLIENT

        //структура-сообщение, очередь создается выше и работает корректно

    struct 
    {
        long mestype;
        int pipe_read;
        int pipe_write;
    } msg_pipe;

        //в канал все записывается 

    for (i=1;i<=width*height;i++)
    {
        scanf("%d",&num);
        write(big_pipe[1],&num,sizeof(int));
    }
    
    //настройка и передача сообщения, MSGPIPE моя константа

    msg_pipe.mestype = MSGPIPE;
    msg_pipe.pipe_read = big_pipe[0];
    msg_pipe.pipe_write = big_pipe[1];
    
    msgsnd(msid,&msg_pipe,2*sizeof(int),0);


Код

//SERVER
        
    //очередь сообщений создана, структура msg_pipe аналогична клиентской
    //читаем сообщение из очереди
 
    msgrcv(msid,&msg_pipe,2*sizeof(int),MSGPIPE,0);

    big_pipe[0] = msg_pipe.pipe_read;
    big_pipe[1] = msg_pipe.pipe_write;
    
    //идентификаторы передались корректно
    //но данный оператор читать из пайпа не желает
    read(big_pipe[0],&num,sizeof(int));


Похоже проблема в том, что пайпы можно использовать только для взаимодействия между родительскими и дочерними процессами. Если я прав, то можно ли как-то заставить это работать?
Заранее спасибо.    

Автор: Anark1 12.12.2009, 21:42
Наверное обойти это никак нельзя, буду делать через FIFO. Если у кого появятся идеи - буду только рад.

Автор: MAKCim 13.12.2009, 10:44
Цитата(Anark1 @  12.12.2009,  21:42 Найти цитируемый пост)
Если у кого появятся идеи - буду только рад. 

используйте сокеты
они лучше масштабируются и более универсальны

Автор: svlary 14.12.2009, 11:35
Цитата(Anark1 @  12.12.2009,  21:42 Найти цитируемый пост)
Наверное обойти это никак нельзя,


Код

man 7 pipe

...
Pipes  can be used to create a communication channel between [color=red]related[/color] processes; 
...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)