Article View: cn.bbs.comp.program
Article #1331������ܵ���ʽʵ�������̼�ͨ�ŵ�һ��ʵ��
From: ���ܵ�Сʨ
Date: Sat, 18 Apr 1998 00:00
Date: Sat, 18 Apr 1998 00:00
180 lines
7990 bytes
7990 bytes
Win32λAPI��֧�ֵ�����ܵ�(named pipe)��ʵ�������̼�ͨ
�ŵ�һ����Ч�ֶΡ�����ܵ��ĽӿڱȽϼ�,�ڳ�����ʵ�ֱȽϷ�
��,���俪����Ӧ�ó���Ҳ������ʹ��,ֻҪ֪���������ܵ�����Ƽ�
��������̨�����ϵ�������̡�
����ܵ�������һ��̵���CreateNamedPipe����,��һ����
����ܵ��Ľ�̳�ΪS erver���,Ȼ��Server���ͨ�����ConnectN
amedPipe����ȴ�һ�ͻ��������ڹܵ�����һ��,Client�����Creat
eFile�����CallNamedPipe����ܵ����,�����õĹܵ�ʵ��,
Client��̿ɵ���WaitNamedPipe����ȴ�һ�����ӳɹ�,Client��
�̺�Server��̿ɵ��ú���ReadFile��WriteFile��ReadFileEx��Wri
teileEx������Ϣ��
������Ӧ�ó��������,��������ܵ���������ʵ��������
��̼�ͨ�ŵ�һ��С���ӡ���һ����ʵ������������̼��ı���ʵʱ
���༭����,������һ̨�����϶��ı����Ŀ�ʵʱ��ӳ����һ̨��
����,�ͺ�����һ��������һ̨�����Ͻ��е�һ������Ͷ���һ
ʵ�������һ���ܡ�
�����������:Server���ֺ�Client���֡�����ֻ�����������
��ʵ���йص����ݡ�
1.Server����
#define BUFSIZE 1280
HANDLE hPipe;
�ιܵ����
BOOL FConnected;
int Success=0;
typedef struct Infor{DWORD Type;char Text[BUFSIZE-64];};
����Ϣ����ṹ
struct infor Info;
�ΰ�༭���ƵĶԻ���
BOOL FAR PASCAL _export PipeServerDlg(HWND hDlg UINT mes
sage,WPARAM wParam, LPARAM IParam)
{
UINT IdTimer,DWORD ret,dwMode;
switch(message){
case WM_INITDIALOG;
IdTimer=SetTimer(hDlg,IdTimer,50,(TIMERPROC)NULL);
��Server��������ܵ�
hPipe=CreateNamedPipe("\\ \\.\\pipe\\buf",�ιܵ���
PIPE_ACCESS_DUPLEX,
��˫����
PIPE_WAIT|PIPE_TYPE_MESSAGE,
������ģʽ,��Ϣ���ܵ�
PIPE_UNLIMITED_INSTANCES,,
�ο��Դ�����Ŀ���Ĺܵ�ʵ��
BUFSIZE,BUFSIZE,1000,NULL);
if(hPipe!=INVALID_HANDLE_VALUE){
�ιܵ������Ч
FConnected=ConnectNamedPipe(hPipe,NULL);�εȴ�����
if(FConected)Succes=1;�����ӳɹ�
else{CloseHandle(hipe);Succes=0;}
}
if(Succes==1){�������ӳɹ�,������ģʽ��Ϊ������ģʽ;
���ö�ģʽΪ��Ϣģʽ
dwMode=PIPE_READMODE_MESSAGE|PIPE_NOWAIT;
SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL);
}
return(TRUE);
case WM_TIMER;
if(Succes==1){�������ӳɹ�,��ʱ���ܵ����
Info.Type=-1;�����ʼֵ
if(ReadFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL)
==TRUE){�ζ��ܵ����
if(Info.Type==-2){���յ��Է�����Ի����ź�,��Է�ͬʱ
����Ի���
KillTimer(hDig,IdTimer); CloseHandle(hPipe); Succes=0
;
EndDialog(hDlg,TRUE); return(TRUE);
}
if(Info.Type==1)SetDlgItemText(hDlg,IDC_EDIT1,Info.Te
xt);
�θ�ݶԷ��ı仯�ı༭��������
} }
break;
case WM_COMMAND;
if(GET_WM_COMMAND_ID(wParam,lParam)==IDOK){�ν���Ի���
KillTimer(hDlg.IdTimer);
if(Succes==1){
Info.Type=-2;���ý���Ի����ź�
WriteFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL;
��д��ݵ��ܵ�
CloseHandle(hPipe);
}
Succes=0;EndDialog(hDlg,TRUE);return(TRUE);
}
if(Succes==1&&LOWORD(wParam)==IDC_EDIT1&&HIWORD(wParam
)== EN_UPDATE){�εõ����ĵı༭�����е�����,��д��ܵ�
GetDlgItemText(hDlg,IDC_EDIT1,(LPSTR)(Info.Text),BUF
SIZE-64);
Info.Type=1;��Info.Type=1:��
WriteFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL
);
}
break;
}
return(FALSE);
}
2.Client����
#define BUFSIZE 1280
HANDLE hPipe�ιܵ����
BOOL FConnected;
int Succes=0,Flag=0;
typedef struct Infor{DWORD Type;char Text[BUFSIZE-64];
};����Ϣ����ṹ
struct Infor Info;
�ΰ�༭���ƵĶԻ���
BOOL FAR PASCAL ��export PipeClientDlg(HWND hDlg,UINT
message,WPARAM wPar am, LPARAM lParam)
{
UINT IdTimer;
DWORD ret,dwMode;
switch(message){
case WM_INITDIALOG:
IdTimer=SetTimer(hDlg,IdTimer,50,(TIMERPROC)NULL);
return(TRUE);
case WM_TIMER;
if(Succes==0&&Flag==0){ ����δ�ܵ����,��ʱ����
��
��Client�ܵ����
hPipe=CreateFile("\\\\ServerName\\pipe\\buf", �ιܵ�
��
��ServerNameΪ���з�������̵Ļ������
GENERIC_READ|GENERIC_WRITE, �ζ�/дģʽ
0,���ļ��ǹ���
NULL,OPEN_EXISTING,0,NULL);
if(hPipe!=INVALID_HANDLE_VALUE){�ξ����Ч
Succes=1;Flag=1;
}
else{
Flag=1;
if(!WaitNamedPipe("\\\\ServerName\\pipe\\buf",20000)Flag
=0;�εȴ�
clse Succes=1;
}
if(Succes==1){
�������ӳɹ�,������ģʽ��Ϊ������ģʽ;���ö�ģʽΪ��Ϣģ
ʽ
dwMode=PIPE_READMODE_MESSAGE|PIPE_NOWAIT;
SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL);
}
}
if(Succes==1){ �������ӳɹ�,��ʱ���ܵ����
Info.Type=-1;�����ó�ֵ
if(ReadFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL)
==TRUE){
if(Info1.Type==-2){���յ��Է�����Ի����ź�,��Է�ͬ
ʱ����Ի���
KillTimer(hDlg,IdTimer);CloseHandle(hPipe);Succes=0;Fla
g=0;
EndDialog(hDlg,TRUE);return(TRUE);
}
if(Info.Type==1)SetDlgItemText(hDlg.IDC_EDIT1,Info.T
ext);
}
}
break;
case WM_COMMAND;
if(GET_WM_COMMAND_ID(wParam,1Param)==IDOK){����
����
KillTimer(hDlg,IdTimer);
if(Succes==1{
Info.Type=-2;WriteFile(hPipe,(char*)&Info,sizeof(Inf
or),&ret,NULL);
CloseHandle(hPipe);
}
Succes=0;Flag=0;EndDialog(hDlg,TRUE);return(TRUE);
}
if(Succes==1&&LOWORD(wParam)==IDC_EDIT1&&
HIWORD(wParam)==EN_UPDATE){
GetDlgItemText(hDlg,IDC_ENIT1,(LPSTR)(Info.Text),BUFSI
ZE-64);
Info.Type=1;WriteFile(hPipe,(char*)&Info,sizeof(Infor)
,&ret,NULL);
}
break;
}
return(FALSE);
}
--
[m[1;37m�� ��Դ:���ϴ�С�ٺ���Ϣ����վ bbs.nju.edu.cn��[FROM: hsia.nju.edu.cn][m
Technical Details
Message-ID:
<3O9QZ0$tLF@bbs.nju.edu.cn>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB X-Google-Thread: fc86e,176857f78cc8ada,start X-Google-Attributes: gidfc86e,public From: pipishi.bbs@bbs.nju.edu.cn (���ܵ�Сʨ) Subject: ������ܵ���ʽʵ�������̼�ͨ�ŵ�һ��ʵ�� Date: 1998/04/18 Message-ID: <3O9QZ0$tLF@bbs.nju.edu.cn> X-Deja-AN: 345306104 X-Filename: Programming/M.892870800.A Organization: nju_bbs Newsgroups: cn.bbs.comp.program