[C++] socket -7 [邮槽]

 

::利用邮槽实现windons进程通信

::一般情况下CreateMailslot()常被使用在进程通信的服务器上,在客户端则是用函数CreateFile()打开指定的邮槽之后进行相关的操作。

::将通过有草读取数据的通信一方成为服务器,而通过邮槽写入数据的一方成为客户端。

 1 /*
 2 服务器端
 3 */
 4 #include<windows.h>
 5 #include<stdio.h>
 6 void main()
 7 {
 8     HANDLE mail;//定义邮槽句柄
 9     mail=CreateMailslot("\\\\.\\mailslot\\mysolt",0,MAILSLOT_WAIT_FOREVER,NULL);//创建邮槽
10     if(mail==INVALID_HANDLE_VALUE)//判断邮槽句柄
11     {
12         printf("创建邮槽失败!\n");
13         CloseHandle(mail);
14     }
15     else
16     {
17         const char text[200];//定义字符数组
18         DWORD readtext;//获取实际读取值
19         printf("创建邮槽成功!正在读取数据..\r\n");//[[接下来等待数据客户端写数据,客户端一旦写好就读出数据]
20         if(ReadFile(mail,text,200,&readtext,NULL))//读取数据
21         {
22             printf(text);
23         }
24         else
25         {    
26             printf("\r\n数据读取失败!\n");
27         }
28     }    
29     CloseHandle(mail);//关闭邮槽
30     Sleep(10000);
31     return;
32 }
 1 /*
 2 客户端
 3 */
 4 #include<windows.h>
 5 #include<stdio.h>
 6 void main()
 7 {
 8     HANDLE mail2;//定义邮槽句柄
 9     char text[]="您好,this is a message";//初始化消息
10     DWORD writetext;//实际发送值
11     mail2=CreateFile("\\\\.\\mailslot\\mysolt",GENERIC_WRITE,FILE_SHARE_READ,
12         NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);//打开文件
13     if(INVALID_HANDLE_VALUE==mail2)
14     {    
15         printf("邮槽打开失败!\r\n");
16     }
17     else
18     {    
19         if(WriteFile(mail2,text,sizeof(text),&writetext,NULL))//写入数据
20         {    
21             Sleep(1000);
22             printf("数据写入成功!\n");
23         }
24         else 
25         {
26             printf("数据写入失败!\n");
27         }
28         CloseHandle(mail2);//关闭句柄
29     }
30     Sleep(10000);
31     return;
32 }

 

posted @ 2014-04-26 21:27  beautifulzzzz  阅读(450)  评论(0编辑  收藏  举报