Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Листинги / Листинги / 17-04-Client

.cpp
Скачиваний:
4
Добавлен:
24.03.2016
Размер:
2.16 Кб
Скачать
#include <windows.h>
#include <iostream.h>
#include <string.h>

int main()
{
  HANDLE  hMailslot;
  char  mailslotName[] = "\\\\.\\mailslot\\demo_mailslot";
  
  // связываемся с почтовым ящиком
  hMailslot = CreateFile(
    mailslotName,      // имя почтового ящика
    GENERIC_WRITE,     // записываем в ящик
    FILE_SHARE_READ,   // разрешаем одновременное чтение из ящика
    NULL,              // защита по умолчанию
    OPEN_EXISTING,     // открываем существующий канал
    0,                 // атрибуты по умолчанию
    NULL               // дополнительных атрибутов нет
    );
  
  // проверяем связь с почтовым ящиком
  if (hMailslot == INVALID_HANDLE_VALUE)
  {
    cerr << "Create file failed." << endl
      << "The last error code: " << GetLastError() << endl;
    cout << "Press any key to finish the client.";
    cin.get();
    
    return 0;
  }
  
  // вводим количество передаваемых сообщений
  int  n;
  cout << "Input a number of messages: ";
  cin >> n;
  cin.get();
  
  // пишем сообщения в почтовый ящик
  for (int i = 0; i < n; ++i)
  {
    DWORD  dwBytesWritten;
    char  pchMessage[256];
    int    nMessageSize;
    
    cout << "Input message: ";
    // читаем сообщение
    cin.getline(pchMessage, 256);
    // определем длину сообщения
    nMessageSize = strlen(pchMessage) + 1;
    
    // пишем сообщение
    if (!WriteFile(
      hMailslot,       // дескриптор почтового ящика
      pchMessage,      // данные
      nMessageSize,    // размер данных
      &dwBytesWritten, // количество записанных байтов
      NULL             // синхронная запись
      ))
    {
      // ошибка записи
      cerr << "Write file failed: " << endl
        << "The last error code: " << GetLastError() << endl;
      cout << "Press any key to finish the client.";
      cin.get();
      
      CloseHandle(hMailslot);

      return 0;
    }
  }
  
  // закрываем дескриптор канала
  CloseHandle(hMailslot);
  // завершаем процесс
  cout << "The messages are written by the client." << endl
    << "Press any key to exit." << endl;
  cin.get();
  
  return 0;
}
Соседние файлы в папке Листинги