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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Почему в символьный массив заносится абракадабра http://www.cyberforum.ru/cpp-beginners/thread406089.html
// sizonov.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" using namespace std; int _tmain(int argc, _TCHAR* argv) { //////////////////////////////////////////////////////////////// int count = 0;
C++ Помогите с прогой Кароче надо помочь написать не сложную програмку. Буду очень благодарен. Использовать плиз ФАЙЛЫ т.е. типо fprintf, fscanf, fputs и т.д. А сама задача такова: Информация о сотрудников предприятия содержит: -ФИО -номер отдела -должность -дату начала работы http://www.cyberforum.ru/cpp-beginners/thread406058.html
C++ HELP с прогой
Кароче надо помочь написать не сложную програмку. Буду очень благодарен. Использовать плиз ФАЙЛЫ т.е. типо fprintf, fscanf, fputs и т.д. А сама задача такова: Информация о месячной заработной плате сотрудников отдела содержит: - Ф.И.О. - наименование отдела. - размер заработной платы за месяц. Вычислить общую сумму выплат за месяц по отделу, а также среднемесячнуй заработоу сотрудников...
циклический алг. C++
посмотрите пожалуйста, правильно задача(с++) решена,и найдено то что требуется? #include<iostream.h> #include<math.h> void main() {double x,y,z,u,umin,xn,xk,hx,yn,yk,hy,zn,zk,hz; cout<<"vvod xn,xk,hx,yn,yk,hy,zn,zk,hz"<<endl; cin>>xn>>xk>>hx>>yn>>yk>>hy>>zn>>zk>>hz; umin=1000; for(x=xn;x<=xk;x=x+hx) for(y=yn;y<=yk;y=y+hy)
C++ Глючит сеть http://www.cyberforum.ru/cpp-beginners/thread406047.html
Подскажите, что проверить? Включаю электрообогреватель маслянный, и компьютерная сеть начинает глючить, то есть соединение то нет, часто. Выключаю обогреватель, вроде работает, пропадает бывет, но не так часто.
C++ программа по матрице Дана матрица А(4,4) 1)найти минимиу среди положительных элементов матрицы 2)подсчитать произведение для второй строки по формуле P=1/(a+4.2) 3)поменять местами минимальный элемент и P подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.12.2011, 17:09     Модель взаимодействия процессов типа клиент-сервер
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;
}
Давно не баловался каналами, если что.
 
Текущее время: 10:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru