邮槽的使用

    技术2022-05-11  3

    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)