Just a test.高手无视.
服务端:
- //Code by Pnig0s1992
- //Date:2012,3,19
- #include <stdio.h>
- #include <Windows.h>
- VOID UseMailSlot(LPTSTR lpMailSlotName);
- int main(int argc,char **argv)
- {
- LPTSTR lpSlotName = TEXT("\\\\.\\mailslot\\first_slot");
- UseMailSlot(lpSlotName);
- return 0;
- }
- VOID UseMailSlot(LPTSTR lpMailSlotName)
- {
- HANDLE hMailSlot;
- BOOL bResult;
- DWORD dwMessageSize;
- DWORD dwMessageCount;
- DWORD dwHasReadBytes;
- hMailSlot = CreateMailslot(lpMailSlotName,0,MAILSLOT_WAIT_FOREVER,NULL);
- if(hMailSlot == INVALID_HANDLE_VALUE)
- {
- printf("\nCreate mailslot:%S failed.",lpMailSlotName);
- return;
- }else
- {
- printf("\nCreate mailslot successfully.");
- }
- int iCount = 0;
- int index = 0;
- while (1)
- {
- bResult = GetMailslotInfo(hMailSlot,NULL,&dwMessageSize,&dwMessageCount,NULL);
- if(!bResult)
- {
- printf("\nGetMailslotInfo failed with error:%d",GetLastError());
- CloseHandle(hMailSlot);
- return;
- }
- if(dwMessageCount == 0)
- {
- printf("\nNo.%d wait for message.",iCount+1);
- iCount++;
- Sleep(2000);
- continue;
- }
- while(dwMessageCount != 0)
- {
- LPTSTR lpMessageBuffer = (LPTSTR)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwMessageSize);
- if(lpMessageBuffer == NULL)
- {
- printf("\nHeapAlloc failed with error:%d",GetLastError());
- CloseHandle(hMailSlot);
- return;
- }
- bResult = ReadFile(hMailSlot,lpMessageBuffer,dwMessageSize,&dwHasReadBytes,NULL);
- if(!bResult)
- {
- printf("\nReadFile failed with error:%d",GetLastError());
- HeapFree(GetProcessHeap(),0,lpMessageBuffer);
- CloseHandle(hMailSlot);
- return;
- }
- printf("\nReceive No.%d message from client.\nContent:%S",index+1,lpMessageBuffer);
- index++;
- HeapFree(GetProcessHeap(),0,lpMessageBuffer);
- bResult = GetMailslotInfo(hMailSlot,0,&dwMessageSize,&dwMessageCount,NULL);
- if(!bResult)
- {
- printf("\nGetMailslotInfo failed with error:%d",GetLastError());
- return;
- }
- }
- }
- return;
- }
客户端:
- //Code by Pnig0s1992
- //Date:2012,3,19
- #include <stdio.h>
- #include <Windows.h>
- VOID ConnectToMailslot(LPTSTR lpMailslotName,LPTSTR lpMessage);
- int main(int argc,char ** argv)
- {
- LPTSTR lpSlotName = TEXT("\\\\.\\mailslot\\first_slot");
- LPTSTR lpMessage = TEXT("Test for mailslot communication.");
- ConnectToMailslot(lpSlotName,lpMessage);
- return 0;
- }
- VOID ConnectToMailslot(LPTSTR lpMailslotName,LPTSTR lpMessage)
- {
- HANDLE hFile;
- hFile = CreateFile(lpMailslotName,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
- if(hFile == INVALID_HANDLE_VALUE)
- {
- printf("\nCreateFile failed with error:%d",GetLastError());
- return;
- }
- BOOL bResult;
- DWORD dwHasWriteBytes;
- bResult = WriteFile(hFile,lpMessage,(DWORD)(lstrlen(lpMessage)+1)*sizeof(TCHAR),&dwHasWriteBytes,NULL);
- if(!bResult)
- {
- printf("\nWriteFile failed with error:%d",GetLastError());
- return;
- }
- printf("Send message to %S successfully.",lpMailslotName);
- return;
- }