荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店