[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 }