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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Goran71
2 / 2 / 0
Регистрация: 21.11.2008
Сообщений: 67
#1

Работа с mailslot - C++

22.05.2009, 22:54. Просмотров 2101. Ответов 4
Метки нет (Все метки)

У меня такой вопрос возник... вот в описании Почтовых ящиков (mailslot) написано:
"Почтовые ящики обеспечивают только однонаправленные соединения. Каждый процесс, который создаёт почтовый ящик, является "сервером почтовых ящиков" (mailslot server). Другие процессы, называемые "клиентами почтовых ящиков" (mailslot client), посылают сообщения серверу, записывая их в почтовый ящик. Каждый процесс может одновременно быть и сервером и клиентом почтовых ящиков, создавая, таким образом, двунаправленные коммуникации между процессами"

т.е. чтобы мне создать например 1 сервер и у него будет 3 клиента мне нужно создать 2 почтовых ящика: "\\.\mailslot\ServerToClient" (в Си++ "\\\\.\\mailslot\\ServerToClient") и
"\\.\mailslot\ClientToServer" (в Си++ "\\\\.\\mailslot\\ClientToServer")
один для отправки от сервера к клиентам, а другой от клиента к серверу
или это как-то можно оптимизировать ???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2009, 22:54     Работа с mailslot
Посмотрите здесь:

Чтение и запись чисел в mailslot - C++
Здравствуйте! Задание: написать 2 программы. Первая программа отправляет 2 float числа второй программе, вторая программа складывает эти...

Передача дескриптора текущего процесса через mailslot - C++
Пытаюсь передать дескриптор текущего процесса и его ID через mailslot. ID проходит норм, сами сообщения "ID процесса" и "Дескриптор" тоже...

MailSlot Delphi XE5 - Delphi
Доброго времени суток! Возникла проблема при выполнении лаб Дмитрия Осипова,препод от нас ушел,а лабы остались,а заменяющий препод ничего...

Почтовые ящики(mailslot) - C#
Подскажите как сделать этот почтовый ящик? то есть тот ящик который нужен для обмена сообщениями процессов? какие классы и т.д для...

Отправить mailslot по IP4 в локалке - C++ WinAPI
Нормально доходит \\Mycomp\mailslot\MySpecSlot (строки приведены без сишного удвоения обратных слешей). Но замена на настоящий IP адрес...

Mailslot и перенаправление ввода/вывода - C++ WinAPI
Есть mailslot'ы, открытые как CreateMailslot так и CreateFile. Не удаётся перенаправить в/из них потоки ввода/вывода. SetStdHandle()...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
29.06.2011, 23:38     Работа с mailslot #2
Тебе нужно создать 1 ящик на сервере,чтобы туда посылали сообщения клиенты, и у каждого клиента по ящику, чтобы туда мог посылать сервер. Итого 1 сервеный + 3 клиентских = 4 ящика
Таким образом к серверу клиенты будут обращаться "\\\\.\\mailslot\\ClientToServer"
А сервер уже будет "\\\\.\\mailslot\\ServerTo[Какой-нибудь порядковый номер или еще чтото]Client"
И кстати не забудь при передаче сообщения серверу как то обозначать кто именно передал, можно например название ящика, если нужно конечно что то передать в ответ.
Это если рассматривать обычную модель клиент-сервер

Добавлено через 1 час 7 минут
Ой, что то я набрел на 100-летнюю тему=)))
mazahaker3000
0 / 0 / 0
Регистрация: 10.12.2010
Сообщений: 11
02.12.2011, 20:22     Работа с mailslot #3
Вот полностью рабочая программа роботы Mailslota

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <vcl.h>
#pragma hdrstop
#include <winbase.h>
#include <stdlib.h>
#include <lm.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
ComboBox1->ItemIndex=2;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    DWORD num,msg,read;
    char buf[512];
 
    bool ret = GetMailslotInfo(hMailsl,NULL,&msg,&num,NULL);
    if (ret == false)
    {
        if ( Application->MessageBox("Íåìîæëèâî îòðèìГ*ГІГЁ ВіГ*ôîðìГ*ö³þ ç³ ñëîòГ*!!!", NULL, MB_OK) != IDOK)
            throw;
        Timer1->Enabled = false;
        exit(-1);
    }
    if (num != 0)
    {
        if (ReadFile(hMailsl, buf, 512, &read, NULL))
        {
            Memo1->Lines->Add((AnsiString)buf);
        }
        else {
            if ( Application->MessageBox("Íåìîæëèâî ïðî÷èòГ*ГІГЁ ïîâ³äîìëåГ*Г*Гї!!!", NULL, MB_OK) != IDOK)
                throw;
            exit(-1);
        }
    }
    ListBox1->Items->SaveToFile("baza.cfg");
    ComboBox1->Items->LoadFromFile("baza.cfg");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char *buf;
    DWORD writen;
    AnsiString sName;
    sName="\\\\" + ComboBox1->Text + "\\mailslot\\$Channel$";
    //sName = "\\\\.\\mailslot\\$Channel$";
    hWsl = CreateFile(sName.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (hWsl == INVALID_HANDLE_VALUE)
    {
        if ( Application->MessageBox("Íåìîæëèâî ñòâîðèòè ñëîò äëÿ Г§Г*ГЇГЁГ±Гі!!!", NULL, MB_OK) != IDOK)
            throw;
        return;
    }
    buf = Memo2->Lines->GetText();
    WriteFile(hWsl, buf, strlen(buf) +1 , &writen, NULL);
    Memo2->Clear();
    Memo2->Lines->Add("Ïîâ³äîìëåГ*Г*Гї â³äïðГ*âëåГ*Г®");
 
    CloseHandle(hWsl);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
char *msName = "\\\\.\\mailslot\\$Channel$";
    hMailsl = CreateMailslot( msName, 0, 1000, NULL);
    if(hMailsl == INVALID_HANDLE_VALUE)
    {
        if ( Application->MessageBox("Íåìîæëèâî ñòâîðèòè MailSlot.", NULL, MB_OK) != IDOK)
            throw;
        exit(-1);
    }
    else (Memo1->Lines->Add("Ñëîò ñòâîðåГ*Г®"));
    Timer1->Interval = 1000;
    Timer1->Enabled = true;
    ComboBox1->Items->LoadFromFile("baza.cfg");
}
//---------------------------------------------------------------------------
Плюс добавляем пару строк в хедер файл чтобы было так:
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
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMemo *Memo1;
        TMemo *Memo2;
        TMainMenu *MainMenu1;
        TTimer *Timer1;
        TButton *Button1;
        TComboBox *ComboBox1;
        TListBox *ListBox1;
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall FormShow(TObject *Sender);
private:    // User declarations
public:     // User declarations
        HANDLE hMailsl, hWsl;
        char *mas;
        char *buf;
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
vitaxa94
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 66
19.12.2013, 21:12     Работа с mailslot #4
Подскажите пожалуйста как скомпилировать эту программу в Visual Studio 2012. Буду очень признателен.
Заранее спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 15:34     Работа с mailslot
Еще ссылки по теме:

Mailslot: Передать матрицу через клиент на сервер - C++ WinAPI
Вот здесь создается сервер и бесконечно ожидает, пока ему не придет матрица, N и M строчка. #include &quot;stdafx.h&quot; #include...

MailSlot клиент-сервер передает нужное количество байт, а выводит — только первый символ - C++ WinAPI
Есть MailSlot сервер (написал на консоле, ведь не принципиально). Есть MailSlot клиент - написал на WinAPI. Вводим в edit-поле данные,...

Нужно передать файл, расположенный на рабочей станции, на которой выполняется сервер, на рабочую станцию​​, на которой выполняется клиент. MailSlot - C++
Ребята. Нужна помощь. Нужно передать файл, расположенный на рабочей станции, на которой выполняется сервер, на рабочую станцию​​, на...

Работа - проведение обучающих семинаров по C#. Работа по выходным дням ( сб-вс - 32 часа). От 30 000р. - Предложения работодателей
Обязанности - проведение обучающих семинаров по C# Базовый (начальный уровень). Опыт преподавания не обязателен, главное чтобы вы не...


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

Или воспользуйтесь поиском по форуму:
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
20.12.2013, 15:34     Работа с mailslot #5
Цитата Сообщение от vitaxa94 Посмотреть сообщение
Подскажите пожалуйста как скомпилировать эту программу в Visual Studio 2012. Буду очень признателен.
Заранее спасибо!
Судя по коду, это было написано в Borland C++ Builder, поэтому в MS VS любой версии - никак.
Yandex
Объявления
20.12.2013, 15:34     Работа с mailslot
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru