18 / 13 / 5
Регистрация: 25.09.2016
Сообщений: 324

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

18.12.2018, 13:28. Показов 1243. Ответов 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
724 / 224 / 72
Регистрация: 01.03.2011
Сообщений: 630
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
724 / 224 / 72
Регистрация: 01.03.2011
Сообщений: 630
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
724 / 224 / 72
Регистрация: 01.03.2011
Сообщений: 630
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Тестирование Pull Request в Kubernetes с vCluster
Mr. Docker 19.07.2025
Часто сталкиваюсь с серьезной дилемой при настройке тестовых окружений для проверки Pull Request в Kubernetes. С одной стороны, каждый PR требует изолированной среды — только так можно гарантировать,. . .
Мой 7 минутный ролик с крамольным предложением про шахматы, предлагаю заценить
_Ivana 18.07.2025
p2UhJNMGY94
Десять Middleware Node.js для эффективного кодинга
Reangularity 18.07.2025
Когда я только начинал работать с Node. js, количество пакетов в npm меня буквально парализовало. Сегодня их больше 1,3 миллиона — попробуй разберись, что стоит твоего внимания, а что нет. Я потратил. . .
Context и глубины Android
mobDevWorks 18.07.2025
В Android разработки Context напоминает воздух - он везде, жизненно необходим, но мало кто может детально объяснить его природу. Мы привыкли получать его как параметр, передавать дальше и. . .
Результаты исследования от команды MCM (июль 2025 г.)
Programma_Boinc 18.07.2025
Результаты исследования от команды MCM (июль 2025 г. ) Как сообщалось в наших предыдущих публикациях, мы изучаем гены, которые имеют наибольший рейтинг и ассоциируются с различными видами рака, в. . .
ИИ-чатбот на React с OpenAI и LangChain.js
Reangularity 17.07.2025
React давно стал для меня золотым стандартом фронтенд-разработки. Его компонентная структура, виртуальный DOM и однонаправленный поток данных идеально подходят для создания динамичных интерфейсов. . .
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например: Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru