Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
18 / 13 / 5
Регистрация: 25.09.2016
Сообщений: 324

Передача от клиента к серверу и от сервера к клиенту через канал fifo()

18.12.2018, 13:28. Показов 1412. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Мне нужно через канал fifo отправить от клиента к серверу строку, сервер должен записать ее с задом-наперед и передать ее к клиенту ,и клиент должен ее вывести. Но у меня передает что то непонятное.

fifo.h
C
1
2
3
4
5
6
7
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#define FIFO "fifo.1"
#define FIFO1 "fifo.2"
#define MAXBUFF 100
Сервер:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "fifo.h"
 
int main(void){
int fd, n,fd1;
char buff[MAXBUFF];
FILE *fp;
char buff1[MAXBUFF];
char filename[20];
int i;
int exit = 0;
if(mknod(FIFO, S_IFIFO | 0666, 0)<0){
printf("FIFO CREATE ERROR");}
if(mknod(FIFO1, S_IFIFO | 0666, 0)<0){
printf("FIFO CREATE ERROR");}
 
if((fd=open(FIFO, O_RDONLY))<0) {
printf("FIFO OPEN ERROR");}
 
if((fd1=open(FIFO1, O_WRONLY)) < 0){
printf("FIFO OPEN ERROR");}
 
ssize_t num_bytes = read(fd, buff, sizeof(buff));
printf("\nstroka — %s\n", buff);
i=strlen(buff);
while(i>=0)
{
printf("%d",buff1[i]);
i=i-1;
} 
 
if(write(fd1,buff1, sizeof(buff1)) != sizeof(buff1)) {
printf("WRITE ERROR"); }
 
//memcpy(buff1,buff,100);
 
//printf("strsd-%s",buff1);
 
close(fd1);}

Клиент:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "fifo.h"
int main(void){
 
int fd,n,fd1;
char buff[MAXBUFF];
char buff1[MAXBUFF];
char mas[]={"aaaassssss"};
 
if((fd=open(FIFO, O_WRONLY)) < 0){
printf("FIFO OPEN ERROR"); exit(1);}
 
if((fd1=open(FIFO1, O_RDONLY))<0) {
printf("FIFO OPEN ERROR");
exit(1);}
 
int i;
int exit = 0;
while(exit == 0){
int ch;
printf("1 \n");
 
 
printf("----> ");
scanf("%d",&ch);
printf("\n");
 
if(ch == 1){
if(write(fd,mas, sizeof(mas)) != sizeof(mas)) {
printf("WRITE ERROR"); }
 
getchar();
}
ssize_t num_bytes = read(fd1, buff1, sizeof(buff1));
printf("\nstroka — %d\n", buff);
if(ch == 2){
exit=1;
getchar();}
if(ch != 1&&ch!=2){
printf("ERROR: Invalid input!\n");
getchar();
}
 
}
close(fd);
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2018, 13:28
Ответы с готовыми решениями:

Передача файлов от сервера к клиенту через сокеты
как с поьощью сокетов передать файл от сервера к клиенту???

Передача данных от клиента серверу через http proxy
Всем, доброго дня. Возникла следующая проблема: как реализовать взаимодействие клиента с сервером через http proxy. Какой нужно включать...

Передача содержимого от сервера клиенту или наоборот через TCP
Вопрос на засыпку. Есть сервер который должен например передать фотографию клиенту или какой то огромный текст, мы знаем что можно...

6
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
18.12.2018, 13:45
Ваш север:
C
1
2
3
4
5
while(i>=0)
{
printf("%d",buff1[i]);
i=i-1;
}
Надо вместо этого сохранить в buff1 перевернутую строку из buff.
0
18 / 13 / 5
Регистрация: 25.09.2016
Сообщений: 324
18.12.2018, 13:57  [ТС]
prik, Спасибо! А как передать обратно клиенту?

Добавлено через 8 минут
prik, И еще как вывести перевернутую строку в клиенте ? Пробую вот так:
C
1
2
ssize_t num_bytes = read(fd1, buff1, sizeof(buff1));
printf("\nstroka — %s\n", buff1);
Но выводит что то непонятное
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
18.12.2018, 14:01
Цитата Сообщение от Mindfure Посмотреть сообщение
А как передать обратно клиенту?
Вы и так передаете buff1 клиенту, только зачем-то целиком. Если строка была получена от клиента полностью включая завершающий \0 (вы этого не проверяете), то отправлять нужно num_bytes.

Добавлено через 1 минуту
Цитата Сообщение от Mindfure Посмотреть сообщение
Но выводит что то непонятное
А как вы исправили в сервере цикл с while (i>=0) ?
0
18 / 13 / 5
Регистрация: 25.09.2016
Сообщений: 324
18.12.2018, 14:04  [ТС]
prik, Попробовал с помощью memcpy сохранить содержимое массива buff в buff1, но почему то туда записалась не измененная строка, а наша текущая
C
1
2
3
4
5
6
7
8
9
while(i>=0)
{
printf("%с",buff[i]);
i=i-1;
 
}
memcpy(buff1,buff,100);
 
printf("strsd-%s",buff1);
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
18.12.2018, 14:11
Цитата Сообщение от Mindfure Посмотреть сообщение
, но почему то туда записалась не измененная строка, а наша текущая
Не постесняюсь спросить, а отчего она должна была как-то поменяться?
0
18 / 13 / 5
Регистрация: 25.09.2016
Сообщений: 324
18.12.2018, 14:25  [ТС]
prik, действительно, я же его на экран только вывел

Добавлено через 8 минут
prik, Не подскажите как правильно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2018, 14:25
Помогаю со студенческими работами здесь

Взаимодействие процессов через FIFO канал
Пытаюсь сделать так, чтобы программа, получая на вход имена текстовых файлов, порождала такое же количество дочерних процессов, каждый из...

Передача объектов серверу и клиенту
Всем привет, возник такой вопрос, есть приложение клиент/сервер, клиенты пересылают друг другу строковые сообщения, которые затем...

Загрузить файл от сервера к клиенту без участия клиента
Podskajite, pojaluista, kak download file from server to client bez uchastia klienta (bez otkriti'ia okna 'save or open'). Prichiom fail...

Boost Asio Передача файла от клиента к клиенту
Есть у кого нибудь реализация сервера-передатчика для передачи файлов от клиента к клиенту?

Передача файлов от клиента к клиенту, минуя сервер(как в icq).
Доброго времени суток! Имеется простенький сервер и клиент, основанные на сокетах(TClientSocket и TServerSocket). Сервер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru