ючи методи адресації, використовувані протоколами IPX/SPX і NETBIOS, неважко помітити, що метод адресації протоколу NETBIOS більш зручний. Ви можете адресувати дані не тільки однієї станції (як і IPX і SPX) або всім станціям відразу (як і IPX), але і групам станцій, які мають однакове групове ім'я. Це може бути зручно, якщо в мережі працюють кілька груп користувачів, які інтенсивно обмінюються даними між собою. p> Іншим перевагою схеми адресації протоколу NETBIOS перед схемою адресації протоколів IPX/SPX можна вважати відсутність необхідності отримувати у фірмі Novell свій власний номер сокета для ідентифікації вашого програмного забезпечення. Ви можете придумати своє власне унікальне групове ім'я, включає, наприклад, назва програми і вашої фірми, і використовувати його для роботи за схемою клієнт-сервер. h2>
MailSlot
Канал Mailslot створюється серверним процесом за допомогою спеціально призначеної для цього функції CreateMailslot. Після створення серверний процес отримує ідентифікатор каналу Mailslot. Користуючись цим ідентифікатором, сервер може читати повідомлення, що посилаються в канал клієнтськими процесами. Однак сервер не може виконувати над каналом Mailslot операцію запису, так як цей канал призначений тільки для односторонньої передачі даних - від клієнта до сервера. При помилку функцією CreateMailslot повертається значення INVALID_HANDLE_VALUE. Код помилки можна визначити за допомогою функції GetLastError.
Перш ніж приступити до роботи з каналом Mailslot, клієнтський процес повинен його відкрити. Для виконання цієї операції слід використовувати функцію CreateFile. Запис повідомлень в канал Mailslot виконує клієнтський процес, викликаючи для цього функцію WriteFile.
Серверний процес може читати повідомлення зі створеного ним каналу Mailslot за допомогою функції ReadFile. Зауважимо, що перед виконанням операції читання слід перевірити стан каналу Mailslot. Якщо в ньому немає повідомлень, то функцію ReadFile викликати не слід. Для перевірки стану каналу ви повинні скористатися функцією GetMailslotInfo. За допомогою функції SetMailslotInfo серверний процес може змінити час очікування для каналу Mailslot вже після його створення.
Ісходникі
Main.cpp
# include
# include
# include
# pragma hdrstop
# include "Main.h"
# include "Podkluch.h"
# include "GameParam.h"
# include "About.h"
// --------------------------------------------- ------------------------------
# pragma package (smart_init)
# pragma link "LMDCustomBevelPanel"
# pragma link "LMDCustomControl"
# pragma link "LMDCustomPanel"
# pragma link "LMDSimplePanel"
# pragma link "LMDBackPanel"
# pragma link "LMDCustomParentPanel"
# pragma link "LMDBaseControl"
# pragma link "LMDBaseGraphicControl"
# pragma link "LMDBaseLabel"
# pragma link "LMDControl"
# pragma link "LMDCustomSimpleLabel"
# pragma link "LMDSimpleLabel"
# pragma link "lmdcont"
# pragma link "LMDCustomComponent"
# pragma link "LMDCustomStatusBar"
# pragma link "LMDStatusBar"
# pragma link "LMDCustomPanelFill"
# pragma link "LMDPanelFill"
# pragma link "LMDCustomScrollBox"
# pragma link "LMDListBox"
# pragma link "LMDCustomFormFill"
# pragma link "LMDFormFill"
# pragma link "LMDWndProcComponent"
# pragma link "LMDBaseShape"
# pragma link "LMDShapeControl"
# pragma link "LMDCustomLabel"
# pragma link "LMDDrawEdge"
# pragma link "LMDLabel"
# pragma link "LMDBaseImage"
# pragma link "LMDCustomGroupBox"
# pragma link "LMDCustomLImage"
# pragma link "LMDGraphicControl"
# pragma link "LMDGroupBox"
# pragma link "LMDLImage"
# pragma link "LMDBaseGraphicButton"
# pragma link "LMDCustomShapeButton"
# pragma link "LMDShapeButton"
# pragma resource "*. dfm"
TMainForm * MainForm;
extern bool IsServer;
extern AnsiString Protocoli [];
extern int KolKub;
extern int MaxOch;
extern int choosenProt;
extern AnsiString ServerHostName;
extern AnsiString ServerHostIP;
extern bool IsHostName;
extern bool IsIgrayut;
extern int NomHoda;
extern int MyCurOch;
extern int MyWholeOch;
extern int HisWholeOch;
extern bool IsYaFixed;
extern bool IsHeFixed;
extern int HisWinPoPartiam;
extern int MyWinPoPartiam;
extern int NomPartia;
int * MasPriem;
// --------------------------------------------- ------------------------------
<...