Форум программистов, компьютерный форум CyberForum.ru

Модель взаимодействия процессов типа клиент-сервер - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
t01001
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 12
13.12.2011, 13:25     Модель взаимодействия процессов типа клиент-сервер #1
РЕбятки, дали сделать курсак, а как его реализовать ну совсем что-то в голову не приходит. Помогите, кто чем может....Главное чтобы заработало и сдать его с глаз долой....

Собственно задание:

"Написать, откомпилировать и запустить на выполнение две программы, которые осуществляют модель взаимодействия процессов типа клиент-сервер. Первая программа должна вывести сообщение «Hello World» после пяти запусков второй программы. Вторая программа должна выводить количество запусков самой себя (реализуется через разделяемую память)"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2011, 13:25     Модель взаимодействия процессов типа клиент-сервер
Посмотрите здесь:

C++ Клиент-сервер
клиент-сервер C++
C++ Клиент - сервер
Сервер-клиент C++
C++ модель графа ресурсов и процессов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
d3dos
0 / 0 / 0
Регистрация: 21.03.2011
Сообщений: 10
13.12.2011, 18:29     Модель взаимодействия процессов типа клиент-сервер #2
Рекомендую открыть "Операционная система UNIX" Робачевски на 258 странице.
Там и описание для защиты и реализация.
t01001
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 12
13.12.2011, 19:52  [ТС]     Модель взаимодействия процессов типа клиент-сервер #3
Спасибо, дельный совет. Сейчас качну книжку, посмотрю что там.

Благодарю.

Добавлено через 1 час 11 минут
Еще есть какие то варианты?)
d3dos
0 / 0 / 0
Регистрация: 21.03.2011
Сообщений: 10
13.12.2011, 20:19     Модель взаимодействия процессов типа клиент-сервер #4
А что не понятно?
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
13.12.2011, 20:29     Модель взаимодействия процессов типа клиент-сервер #5
Могу кинуть программу на почту, пару строк подправишь и все будет как надо. под твои цели. Не кидаю сюда т.к. там несколько файлов и "хитрые" настройки директорий. Почту в пм.
Если хочешь сам то читай игра на winsoket.
t01001
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 12
14.12.2011, 00:16  [ТС]     Модель взаимодействия процессов типа клиент-сервер #6
AC-93, megashell@ukr.net

Добавлено через 1 час 6 минут
почему то не могу отправить тебе сообщение, просто такого пункта нет. Не пойму в чем дело.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.12.2011, 17:09     Модель взаимодействия процессов типа клиент-сервер #7
t01001, да вот есть простенький способ при помощи именованного канала, очень простое решение как один из вариантов.
Процесс-сервер.
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
47
48
49
50
51
52
53
54
55
56
57
58
#include <windows.h>
#include <stdio.h>
#define  PIPENAME  "\\\\.\\pipe\\xAtom"
DWORD  WINAPI  ThreadPipe(LPVOID param);
HANDLE thread  = NULL;
 
int  main(void) { 
  // создаём именованный канал
  HANDLE pp = CreateNamedPipeA(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | 
                    PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 
                    sizeof(int), sizeof(int), 0, NULL);
  if(pp == INVALID_HANDLE_VALUE) { // при ошибки уходим отсюда
        printf("Error create pipe, code(%d\n", GetLastError());
        return 1;
  }
  
  // создаём поток(в приостановленном состоянии) для обслуживания клиентов
  thread = CreateThread(NULL, 0u, ThreadPipe, (LPVOID)pp, CREATE_SUSPENDED, NULL);
  if(thread == NULL) {
        printf("Error create thread, code(%d)\n", GetLastError());
        CloseHandle(pp);
        return 1;
  }
  // установим приоритет потоку
  SetThreadPriority(thread, THREAD_PRIORITY_ABOVE_NORMAL);
  ResumeThread(thread);  // пробуждаем поток
 
  // при нажатии enter закрываем всё
  getchar();
  TerminateThread(thread, 0u);
  CloseHandle(thread);
  CloseHandle(pp);
  return 0;
}
 
DWORD  WINAPI  ThreadPipe(LPVOID param) {
  DWORD dread = 0u;
  int num = 0, cnt = 0;
  HANDLE pipe = (HANDLE)param;
prev:
  ConnectNamedPipe(pipe, NULL); // ждём подключения клиента
  while(1) {
         // при подключении клиента пытаемся читать
         BOOL succ = ReadFile(pipe, (LPVOID)&num, sizeof(int), &dread, NULL);
         if(! succ) { // если ошибка
              if(GetLastError() == ERROR_BROKEN_PIPE) { // наверное клиент умер
                    DisconnectNamedPipe(pipe);  // отсоеденяем его
                    goto prev;  // прыгаем до метки
              }
         }
         if(dread > 0u) {
               if(++cnt == 5) // по заданию на 5-ом запуске вывести в консоль текст
                    puts("Hello World !!!");
               WriteFile(pipe, (LPCVOID)&cnt, sizeof(int), &dread, NULL);
        }
  }
  return 0;
}
Процесс-клиент.
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
#include <windows.h>
#include <stdio.h>
#define  PIPENAME  "\\\\.\\pipe\\xAtom"
 
int main(void){
prev:
   HANDLE pp = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0u, NULL, OPEN_EXISTING, 0u, NULL);
   if(pp == INVALID_HANDLE_VALUE) {
         if(GetLastError() == ERROR_PIPE_BUSY) { // если занят канал
                printf("Pipe wat busy !\n");
                WaitNamedPipe(PIPENAME, 1000);  // через 1-секунду повторим коннект
                goto prev;
         }
         printf("Error open pipe, code(%d)\n", GetLastError());
         return 1;
  }
  DWORD mode = PIPE_READMODE_MESSAGE; 
  if(! SetNamedPipeHandleState(pp, &mode, NULL, NULL)) {
        CloseHandle(pp);
        return 1;
  }
  DWORD drw = 0u;
  int num  = 0;
  WriteFile(pp, (LPCVOID)&num, sizeof(int), &drw, NULL); // кидаем  "сигнал" серверу
  while(1) {
       BOOL succ = ReadFile(pp, (LPVOID)&num, sizeof(int), &drw, NULL); // ждём ответ
       if(! succ) // ошибка чтения, может быть сервер погас
           break;
       if(drw > 0u) { // если пришёл data-ответ, выводим кол-во запусков
           printf("Run application count = %d\n", num);
           break;
       }
  }
  CloseHandle(pp);
  system("pause");
  return 0;
}
Давно не баловался каналами, если что.
t01001
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 12
14.12.2011, 19:21  [ТС]     Модель взаимодействия процессов типа клиент-сервер #8
Спасибо ребятки за помощь и сознательность.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2011, 19:52     Модель взаимодействия процессов типа клиент-сервер
Еще ссылки по теме:

клиент-сервер приложение передача потокового видео на сервер C++
C++ Клиент-сервер
C++ Клиент-сервер

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

Или воспользуйтесь поиском по форуму:
AC-93
14.12.2011, 19:52     Модель взаимодействия процессов типа клиент-сервер
  #9
 Комментарий модератора 
3.9. Запрещено накручивать репутацию любым способом, включая создание пользователей-клонов, а также склонять (агитировать) других пользователей к ее повышению.
Yandex
Объявления
14.12.2011, 19:52     Модель взаимодействия процессов типа клиент-сервер
Ответ Создать тему
Опции темы

Текущее время: 08:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru