Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено через 1 час 7 минут
Ой, что то я набрел на 100-летнюю тему=)))
0
mazahaker3000
0 / 0 / 0
Регистрация: 10.12.2010
Сообщений: 11
02.12.2011, 20:22 #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
0
vitaxa94
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 66
19.12.2013, 21:12 #4
Подскажите пожалуйста как скомпилировать эту программу в Visual Studio 2012. Буду очень признателен.
Заранее спасибо!
0
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
20.12.2013, 15:34 #5
Цитата Сообщение от vitaxa94 Посмотреть сообщение
Подскажите пожалуйста как скомпилировать эту программу в Visual Studio 2012. Буду очень признателен.
Заранее спасибо!
Судя по коду, это было написано в Borland C++ Builder, поэтому в MS VS любой версии - никак.
0
20.12.2013, 15:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 15:34
Привет! Вот еще темы с ответами:

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

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

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

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления - C#
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми элементами управления(toolbox).И если...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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