77.郵槽通信
阿新 • • 發佈:2018-02-20
email size exist amp value read char info printf
服務器端
- 創建郵槽
1 //名稱,數量 等待時間 安全屬性 2 HANDLE hmailslot = CreateMailslotA(MAILSLOT, 0, MAILSLOT_WAIT_FOREVER, NULL);
- 獲取郵槽信息
1 DWORD dxNextsize = 0;//標識最大的數據大小 2 DWORD dxmsgcount = 0;//消息數量 3 DWORD readcount = 0;//讀取成功的數量 4 5 //
- 從郵槽讀取一個數據
1 // LPBYYE 的類型是 unsigned char * 2 //分配內存 3 LPBYTE lpbuf = malloc(dxNextsize + 1
、服務端負責顯示
服務端完整代碼
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<Windows.h> 45 //定義郵槽 6 #define MAILSLOT "\\\\.\\mailslot\\cgw" 7 8 9 void main() 10 { 11 //創建郵槽 12 //名稱,數量 等待時間 安全屬性 13 HANDLE hmailslot = CreateMailslotA(MAILSLOT, 0, MAILSLOT_WAIT_FOREVER, NULL); 14 if (hmailslot == NULL) 15 { 16 printf("創建失敗"); 17 } 18 else 19 { 20 21 while (1) 22 { 23 system("pause"); 24 DWORD dxNextsize = 0;//標識最大的數據大小 25 DWORD dxmsgcount = 0;//消息數量 26 DWORD readcount = 0;//讀取成功的數量 27 28 //獲取郵槽信息 29 //文件名 標記最大的數據大小 多少條消息 安全屬性 30 if (GetMailslotInfo(hmailslot, NULL, &dxNextsize, &dxmsgcount, NULL)) 31 { 32 33 for (int i = 0; i < dxmsgcount;i++) 34 { 35 // LPBYYE 的類型是 unsigned char * 36 //分配內存 37 LPBYTE lpbuf = malloc(dxNextsize + 1); 38 //讀取一行 39 //文件名 首地址 大小 讀的個數 40 ReadFile(hmailslot, lpbuf, dxNextsize, &readcount, NULL); 41 printf("\n%s", lpbuf); 42 } 43 } 44 else 45 { 46 printf("error"); 47 } 48 } 49 } 50 system("pause"); 51 }
客戶端
- 打開郵槽
1 //第一個名稱,第二個寫入,第三個共享讀,打開已經存在 2 HANDLE hmailslot = CreateFileA(MAILSLOT, 3 GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
- 向郵槽寫入數據
1 char str[10] = "123456789"; 2 scanf("%s", str); 3 //轉化指針類型 4 LPBYTE lpmsg = (LPBYTE)str; 5 int wok = 0; 6 //寫入信息,第一個句柄,第二個寫入內存首地址,第三個長度,第四個寫入成功保存wok 7 WriteFile(hmailslot, lpmsg,10,&wok,NULL);
- 關閉郵槽
1 CloseHandle(hmailslot);//關閉
客戶端完整代碼
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<Windows.h> 5 6 #define MAILSLOT "\\\\.\\mailslot\\cgw" 7 8 //#define GENERIC_READ (0x80000000L) 9 //#define GENERIC_WRITE (0x40000000L) 10 //#define GENERIC_EXECUTE (0x20000000L) 11 //#define GENERIC_ALL (0x10000000L) 12 void main() 13 { 14 15 //第一個名稱,第二個寫入,第三個共享讀,打開已經存在 16 HANDLE hmailslot = CreateFileA(MAILSLOT, 17 GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL); 18 19 if (hmailslot ==INVALID_HANDLE_VALUE) 20 { 21 printf("打開失敗"); 22 } 23 while (1) 24 { 25 char str[10] = "123456789"; 26 scanf("%s", str); 27 //轉化指針類型 28 LPBYTE lpmsg = (LPBYTE)str; 29 int wok = 0; 30 //寫入信息,第一個句柄,第二個寫入內存首地址,第三個長度,第四個寫入成功保存wok 31 WriteFile(hmailslot, lpmsg,10,&wok,NULL); 32 33 } 34 CloseHandle(hmailslot);//關閉 35 36 system("pause"); 37 }
77.郵槽通信