荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: playboy (冷冷的太阳), 信区: Program
标 题: Win32 行程通讯的观念与技术(5)
发信站: BBS 荔园晨风站 (Mon Mar 20 15:51:00 2000), 转信
至於MailSlot的Client程式则没有什麽好说的,就当是档案迳行开启与写入即可:
procedure TMailSlotClient.Open;
var
ASlotName: string;
begin
if FActive then Exit;
// MailSlot 的识别名称
ASlotName := '\\' + FServerName + '\mailslot\' + FSlotName;
// 开启 MailSlot(档案)
FHandle := CreateFile(pchar(ASlotName),
GENERIC_WRITE, // Client 端对於 MailSlot 只能写入
FILE_SHARE_READ, // 设定为可供分享读取
Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
FActive := FHandle <> INVALID_HANDLE_VALUE;
end;
function TMailSlotClient.WriteIntoMailSlot(
const Data: string): integer;
begin
Result := 0;
if FHandle = INVALID_HANDLE_VALUE then Exit;
Result := FileWrite(Fhandle, Data[1], Length(Data));
end;
稍早提到MailSlot适合於跨越机器边界的网路广播, 可是我也说
明了只有MailSlot Server才可以读取资料,那要怎麽广播啊?答案
在於MailSlot的名称。别的机器如果也用相同的名称建立MailSlot Server
,一旦任一个Client对某一个MailSlot(也是经由名称来叁考)送出讯息,
这份讯息会游向网路节点上各个指定同名的MailSlot,这样子就达成广
播的效果。至於讯息是怎麽流来流去的,就留给系统与网路底层去伤脑
筋了,程式只管以档案写入资料的方式送出资料即可。
使用MailSlot时很可能你会遇到讯息重覆的问题;也就是说,虽然
MailSlot Client端只写了一个讯息,但相同的讯息MailSlot Server却
可能收到两份。原因是这样的:由於Win3=饩龅姆椒ㄊ窃谧柿峡反由弦恍┛刂?
用的编号代码,Server据以判断是否是相同的资料。
像MailSlot这样的通讯机制可以应用在哪些场合呢? 着名的例子是
WinPopup,刚才我也写了一支阳春的, 次图是MyWinpop.exe 执行的情
况。由於MailSlot广播的特性,十分适合网管时用来知会使用者重要的
讯息,此外,MIS系统也可以用它适时的报告异常状况,各使用者如果
在「开始┃启动」中都放置这支小程式,彼此便可以之交换讯息,
当讯号进来时,也会立即显示讯息的内容。
--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.90]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店