邮槽的使用

windows NT ,windows 2000,windows95 he windows98提供了一种简单的单向"进程间通信机制" ,名字很奇怪,叫邮槽.(mailslot)..简单的说, 通过邮槽,客户端进程可将消息传送或广播给一个或多个服务器进程...在同一台机器或在跨整个网络的不同计算机的进程之间,用邮槽来开发是相当简单的事情.

由于邮槽是围绕一个广播通信体系设计出来的,所以它的可靠性不是十分的好..但是在特殊的环境中,还是相当有价值的.. 我们举个例子吧.....

比如有个文件我们每过一段时间(如5秒)要读取它的文件大小.,实现监控.,并可以把结果发给局域网内的许多用户....那么可以用邮槽来实现.....

客户端:

#include<windows.h>
#include<iostream.h>
int main()
{
 char tosend[100],buffer[100];
 DWORD bufferlen=100;
 HANDLE hsms_slot;
 BOOL status;
 DWORD numbytewritten;
    hsms_slot=CreateFile("*//mailslot//sms",GENERIC_WRITE,FILE_SHARE_READ,(LPSECURITY_ATTRIBUTES)NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);

 if(hsms_slot==INVALID_HANDLE_VALUE)
 {
  cerr<<"ERROR: unablieto creat mailslot"<<endl;
  return 1;
 }
    strcpy(tosend,"test string from 127.0.0.1");
 while(1)
 {
  cout<<"sending ...."<<endl;
  status=WriteFile(hsms_slot,tosend,(DWORD)strlen(tosend)+1,&numbytewritten,(LPOVERLAPPED)NULL);
  if(!status)
  {
   cerr<<"ERROR: unable to get status:"<<GetLastError()<<endl;
   CloseHandle(hsms_slot);
   return 1;
  }
  Sleep(4800);
 }
}]

服务端:

#include<windows.h>
#include<iostream.h>

int main()
{
 char todisplay[80];
 HANDLE hsms_slot;
 DWORD nextsize;
 DWORD msgs;
 DWORD numbyteread;
 BOOL status;
 hsms_slot=CreateMailslot(".//mailslot//sms",0,0,(LPSECURITY_ATTRIBUTES)NULL);
 if(hsms_slot==INVALID_HANDLE_VALUE)
 {
  cerr<<"ERROR: unablieto creat mailslot"<<endl;
  return 1;
 }
 while(1)
 {
  status=GetMailslotInfo(hsms_slot,(LPDWORD)NULL,&nextsize,&msgs,(LPDWORD)NULL);
  if(!status)
  {
   cerr<<"ERROR: unable to get status:"<<GetLastError()<<endl;
   CloseHandle(hsms_slot);
   return 1;
  }
  if(msgs)
  {
   if(!ReadFile(hsms_slot,todisplay,nextsize,&numbyteread,(LPOVERLAPPED)NULL))
   {
    cerr<<"ERROR: read from mailsolt"<<endl;
    CloseHandle(hsms_slot);
    return 1;
   }
   cout<<todisplay<<endl;
  }
  else
   Sleep(500);
 }
}

其中//*/mailslot/sms为邮槽名 .*表示局域网的所有用户, mailslot为统一的名字....

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睡在床板下_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值