1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| HANDLE hNamedPipe = NULL;
void CNamedPipeServerDlg::OnBnClickedButtonCreate() { LPCWSTR szPipeName = TEXT("\\\\.\\pipe\\mypipe"); hNamedPipe = CreateNamedPipe( szPipeName, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE, 1, 1024, 1024, 0, NULL ); if (hNamedPipe == INVALID_HANDLE_VALUE) { MessageBox(TEXT("命名管道创建失败")); CloseHandle(hNamedPipe); hNamedPipe = NULL; return; }
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (hEvent == INVALID_HANDLE_VALUE) { MessageBox(TEXT("事件创建失败")); CloseHandle(hEvent); return; }
OVERLAPPED overlapped = { 0 }; overlapped.hEvent = hEvent;
if (!ConnectNamedPipe(hNamedPipe, &overlapped)) { if (GetLastError() != ERROR_IO_PENDING) { MessageBox(TEXT("等待客户端连接失败")); CloseHandle(hNamedPipe); CloseHandle(hEvent); hNamedPipe = NULL; return; } }
if (WaitForSingleObject(hEvent, INFINITE) == WAIT_FAILED) { MessageBox(TEXT("等待对象失败")); CloseHandle(hNamedPipe); CloseHandle(hEvent); hNamedPipe = NULL; return; }
CloseHandle(hEvent); MessageBox(TEXT("客户端已连接!")); }
void CNamedPipeServerDlg::OnBnClickedButtonSend() { if (hNamedPipe == NULL) { MessageBox(TEXT("请先建立管道连接")); return; }
char szSendBuf[100] = "我是服务端"; DWORD dwWriteNum;
if (!WriteFile(hNamedPipe, szSendBuf, strlen(szSendBuf) + 1, &dwWriteNum, NULL)) { MessageBox(TEXT("发送失败")); return; } }
void CNamedPipeServerDlg::OnBnClickedButtonRecv() { if (hNamedPipe == NULL) { MessageBox(TEXT("请先建立管道连接")); return; }
char szRecvBuf[100] = { 0 }; DWORD dwReadNum;
if (!ReadFile(hNamedPipe, szRecvBuf, 100, &dwReadNum, NULL)) { MessageBox(TEXT("接收失败")); return; }
TRACE("dwReadNum = %d\n", dwReadNum); MessageBox(szRecvBuf); }
|