🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: cn.bbs.comp.program
1 messages
1 total messages Started by ���ܵ�Сʨ Sat, 18 Apr 1998 00:00
������ܵ���ʽʵ�������̼�ͨ�ŵ�һ��ʵ��
#1331
Author: ���ܵ�Сʨ
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]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads