🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #1331

������ܵ���ʽʵ�������̼�ͨ�ŵ�һ��ʵ��

#1331
From: ���ܵ�Сʨ
Date: Sat, 18 Apr 1998 00:00
180 lines
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);
    }

--
�� ��Դ:���ϴ�С�ٺ���Ϣ����վ bbs.nju.edu.cn��[FROM: hsia.nju.edu.cn]
Technical Details
Message-ID: <3O9QZ0$tLF@bbs.nju.edu.cn>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show 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