Windows IPC - Pipe(이름 있는 파이프)
Posted 2009/04/24 01:30|
|
|
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
이름 있는 파이프(name pipe)
- 양방향 가능
- 이름을 붙일수 있다
(이름 붙이는 규칙 : "\pc이름\pipe\원하는 이름") Universal Name Convention
서버쪽에서 파이프를 생성한 후 대기(ConnectNamedPipe)하면 클라이언트에서
연결(CreateFile())한다
---------------------------- Server 부분 ---------------------------------
서버쪽에서 파이프를 생성한 후 대기한다
#include <windows.h>
#include <stdio.h>
DWORD WINAPI foo(void *p)
{
HANDLE hPipe = CreateNamedPipe(\\\\.\\pipe\\MyPipe, // 이름
PIPE_ACCESS_INBOUND, // 입력 전용
PIPE_TYPE_MESSAGE, // <-> stream
3, // 최대 갯수
1024, 1024, // 버퍼 크기
1000, // WaitNamedPipe()함수가
// 대기할 수 있는 Timeout 사용
0); // KO 보안
if( hPipe == INVALID_HANDLE_VALUE) // -1
{
printf("Error\n");
return 0;
}
while(1)
{
// 클라이언트를 대기한다
// (누군가가 pipe에 접속할때까지 대기한다)
DWORD ret = ConnectNamedPipe(hPipe, 0);
if(ret == TRUE)
{
// 화면에 출력하는 부분
while(1)
{
char data[4096] = {0};
DWORD len;
ReadFile(hPipe, data, 4096, &len, 0);
if(len <= 0)// Client의 접속이 종료 된 경우
{
break;
}
printf("%s\n", data);
if(strcmp(data,"quit") == 0) break;
}
DisconnectNamedPipe(hPipe);
printf("대기중입니다\n");
}
}
}
void main()
{
HANDLE hThread1 = CreateThread(0, 0, foo, 0, 0, 0);
HANDLE hThread2 = CreateThread(0, 0, foo, 0, 0, 0);
HANDLE hThread3 = CreateThread(0, 0, foo, 0, 0, 0);
HANDLE h[3] = {hThread1, hThread2, hThread3};
WaitForMultipleObjects(3, h, TRUE, INFINITE);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hThread3
}
---------------------------- Client -----------------------------
파이프에 접속하는 프로그램
#include <stdio.h>
#include <windows.h>
void main()
{
char name[256] = "\\\\.\\pipe\\MyPipe";
// . 대신 ip주소를 쓸수 있다
HANDLE hPipe = CreateFile(name, GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if(hPipe == INVALID_HANDLE_VALUE)
{
printf("파이프에 접속할 수 없습니다 \n");
return;
}
while(1)
{
char data[4096] = {0};
gets(data);
DWORD len;
WriteFile(hPipe, data, 4096, &len, 0);
if(strcmp(data, "quit") == 0) break;
}
CloseHandle(hPipe);
}
// 서버를 먼저 실행하세요..
// 클라이언트 실행하세요..
// 클라이언트에서 문자열 입력 후 Enter....
위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
- Filed under : 프로그래밍/MFC & Win32
- 3 Comments Trackback


김태우
| 2009/05/24 02:36 | PERMALINK | EDIT | REPLY |깔끔한 정리 감사드려요~ ^ㅇ^)/
서퍼
| 2009/10/29 18:14 | PERMALINK | EDIT | REPLY |좋은 자료 감사합니다.
dev
| 2009/12/29 17:58 | PERMALINK | EDIT | REPLY |우와우~ 정말 감사합니다~ 좋은 자료에요 ㅠㅠ