用命名管道进行两台机器的通信,即在网络上两个进程进行通信,WaitNamedPipe函数的第一个参数应该怎么样写 30

就是管道的名字那个参数,如果是小圆点就代表本地,如果是网络上的服务器呢?比如我用我的主机做服务器,同学的电脑运行客户端,那么客户端的WaitNamedPipe函数的第一个... 就是管道的名字那个参数,如果是小圆点就代表本地,如果是网络上的服务器呢?比如我用我的主机做服务器,同学的电脑运行客户端,那么客户端的WaitNamedPipe函数的第一个参数应该怎么样写,具体举个例子,我用我的IP地址代替小圆点不行,我的主机的名字也不行..求指教啊 展开
 我来答
daihengbiao
2011-07-21
知道答主
回答量:17
采纳率:0%
帮助的人:4.9万
展开全部
Win32位API集支持的命名管道(named pipe)是实现网络进程间通信的一种有效手段。命名管道的接口比较简单,在程序中实现比较方便,由其开发的应用程序也很容易使用,只要知道机器及管道的名称即可连接两台机器上的两个进程。kznuqzahyx
  命名管道首先由一进程调用CreateNamedPipe函数创建,这一创建命名管道的进程称为Server进程,然后Server进程通过调用ConnectNamedPipe函数等待一客户相连。在管道的另一段,Client进程用CreateFile函数或CallNamedPipe函数打开管道句柄,若无可用的管道实例,Client进程可调用WaitNamedPipe函数等待。一旦连接成功,Client进程和Server进程可调用函数ReadFile、WriteFile或ReadFileEx、WriteileEx传输信息。kznuqzahyx
  笔者在应用程序开发过程中,曾用命名管道方法做了实现网络两进程间通信的一个小例子。这一例子实现了网络两进程间文本的实时互编辑操作,即在任一台机器上对文本的修改可实时反映到另一台机器上,就好像这一修改是在另一台机器上进行的一样。下面就对这一实验程序作一介绍。kznuqzahyx
  程序分两部分:Server部分和Client部分。文中只介绍与命名管道实现有关的内容。kznuqzahyx
1.Server部分kznuqzahyx
#define BUFSIZE 1280 kznuqzahyx
HANDLE hPipe; ∥管道句柄 kznuqzahyx
BOOL FConnected; kznuqzahyx
int Success=0; kznuqzahyx
typedef struct Infor{DWORD Type;char Text[BUFSIZE-64];};∥信息传输结构 kznuqzahyx
struct infor Info; kznuqzahyx
∥包含编辑控制的对话框 kznuqzahyx
BOOL FAR PASCAL _export PipeServerDlg(HWND hDlg UINT message,WPARAM wParam,LPARAM IParam) kznuqzahyx
{ kznuqzahyx
UINT IdTimer,DWORD ret,dwMode; kznuqzahyx
switch(message){ kznuqzahyx
case WM_INITDIALOG; kznuqzahyx
IdTimer=SetTimer(hDlg,IdTimer,50,(TIMERPROC)NULL); kznuqzahyx
∥Server创建命名管道 kznuqzahyx
hPipe=CreateNamedPipe("\\ \\.\\pipe\\buf",∥管道名 kznuqzahyx
PIPE_ACCESS_DUPLEX, ∥双向传输 kznuqzahyx
PIPE_WAIT|PIPE_TYPE_MESSAGE, ∥阻塞模式,消息流管道 kznuqzahyx
PIPE_UNLIMITED_INSTANCES,, ∥可以创建数目不限的管道实例 kznuqzahyx
BUFSIZE,BUFSIZE,1000,NULL); kznuqzahyx
if(hPipe!=INVALID_HANDLE_VALUE){ ∥管道句柄有效 kznuqzahyx
FConnected=ConnectNamedPipe(hPipe,NULL);∥等待连接 kznuqzahyx
if(FConected)Succes=1;∥连接成功 kznuqzahyx
else{CloseHandle(hipe);Succes=0;} kznuqzahyx
} kznuqzahyx
if(Succes==1){∥若连接成功,将阻塞模式变为非阻塞模式;设置读模式为消息模式 kznuqzahyx
dwMode=PIPE_READMODE_MESSAGE|PIPE_NOWAIT; kznuqzahyx
SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL); kznuqzahyx
} kznuqzahyx
return(TRUE); kznuqzahyx
case WM_TIMER; kznuqzahyx
if(Succes==1){∥若连接成功,定时读管道数据 kznuqzahyx
Info.Type=-1;∥设初始值 kznuqzahyx
if(ReadFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL)==TRUE){∥读管道数据 kznuqzahyx
if(Info.Type==-2){∥收到对方结束对话框信号,与对方同时结束对话框 kznuqzahyx
KillTimer(hDig,IdTimer); CloseHandle(hPipe); Succes=0; kznuqzahyx
EndDialog(hDlg,TRUE); return(TRUE); kznuqzahyx
} kznuqzahyx
if(Info.Type==1)SetDlgItemText(hDlg,IDC_EDIT1,Info.Text); kznuqzahyx
∥根据对方的变化修改编辑控制内容 kznuqzahyx
} } kznuqzahyx
break; kznuqzahyx
case WM_COMMAND; kznuqzahyx
if(GET_WM_COMMAND_ID(wParam,lParam)==IDOK){∥结束对话框 kznuqzahyx
KillTimer(hDlg.IdTimer); kznuqzahyx
if(Succes==1){ kznuqzahyx
Info.Type=-2;∥置结束对话框信号 kznuqzahyx
WriteFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL; kznuqzahyx
∥写数据到管道 kznuqzahyx
CloseHandle(hPipe); kznuqzahyx
} kznuqzahyx
Succes=0;EndDialog(hDlg,TRUE);return(TRUE); kznuqzahyx
} kznuqzahyx
if(Succes==1&&LOWORD(wParam)==IDC_EDIT1&&HIWORD(wParam)==kznuqzahyx
EN_UPDATE){∥得到已修改的编辑控制中的内容,并写入管道 kznuqzahyx
GetDlgItemText(hDlg,IDC_EDIT1,(LPSTR)(Info.Text),BUFSIZE-64); kznuqzahyx
Info.Type=1;∥Info.Type=1:修改 kznuqzahyx
WriteFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL); kznuqzahyx
} kznuqzahyx
break; kznuqzahyx
} kznuqzahyx
return(FALSE); kznuqzahyx
} kznuqzahyx
2.Client部分 kznuqzahyx
#define BUFSIZE 1280 kznuqzahyx
HANDLE hPipe∥管道句柄 kznuqzahyx
BOOL FConnected; kznuqzahyx
int Succes=0,Flag=0; kznuqzahyx
typedef struct Infor{DWORD Type;char Text[BUFSIZE-64];};∥信息传输结构 kznuqzahyx
struct Infor Info; kznuqzahyx
∥包含编辑控制的对话框 kznuqzahyx
BOOL FAR PASCAL —export PipeClientDlg(HWND hDlg,UINT message,WPARAM wParam, LPARAM lParam)kznuqzahyx
{ kznuqzahyx
UINT IdTimer; kznuqzahyx
DWORD ret,dwMode; kznuqzahyx
switch(message){ kznuqzahyx
case WM_INITDIALOG: kznuqzahyx
IdTimer=SetTimer(hDlg,IdTimer,50,(TIMERPROC)NULL); kznuqzahyx
return(TRUE); kznuqzahyx
case WM_TIMER; kznuqzahyx
if(Succes==0&&Flag==0){ ∥若未打开管道句柄,定时作打开操作 kznuqzahyx
∥Client打开管道句柄 kznuqzahyx
hPipe=CreateFile("\\\\ServerName\\pipe\\buf", ∥管道名 kznuqzahyx
∥ServerName为运行服务器进程的机器名称 kznuqzahyx
GENERIC_READ|GENERIC_WRITE, ∥读/写模式 kznuqzahyx
0,∥文件非共享 kznuqzahyx
NULL,OPEN_EXISTING,0,NULL); kznuqzahyx
if(hPipe!=INVALID_HANDLE_VALUE){∥句柄有效 kznuqzahyx
Succes=1;Flag=1; kznuqzahyx
} kznuqzahyx
else{ kznuqzahyx
Flag=1; kznuqzahyx
if(!WaitNamedPipe("\\\\ServerName\\pipe\\buf",20000)Flag=0;∥等待 kznuqzahyx
clse Succes=1; kznuqzahyx
} kznuqzahyx
if(Succes==1){ kznuqzahyx
∥若连接成功,将阻塞模式变为非阻塞模式;设置读模式为消息模式 kznuqzahyx
dwMode=PIPE_READMODE_MESSAGE|PIPE_NOWAIT; kznuqzahyx
SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL); kznuqzahyx
} kznuqzahyx
} kznuqzahyx
if(Succes==1){ ∥若连接成功,定时读管道数据 kznuqzahyx
Info.Type=-1;∥设置初值 kznuqzahyx
if(ReadFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL)==TRUE){ kznuqzahyx
if(Info1.Type==-2){∥收到对方结束对话框信号,与对方同时结束对话框 kznuqzahyx
KillTimer(hDlg,IdTimer);CloseHandle(hPipe);Succes=0;Flag=0; kznuqzahyx
EndDialog(hDlg,TRUE);return(TRUE); kznuqzahyx
} kznuqzahyx
if(Info.Type==1)SetDlgItemText(hDlg.IDC_EDIT1,Info.Text); kznuqzahyx
} kznuqzahyx
} kznuqzahyx
break; kznuqzahyx
case WM_COMMAND; kznuqzahyx
if(GET_WM_COMMAND_ID(wParam,1Param)==IDOK){∥结束对话框 kznuqzahyx
KillTimer(hDlg,IdTimer); kznuqzahyx
if(Succes==1{ kznuqzahyx
Info.Type=-2;WriteFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL); kznuqzahyx
CloseHandle(hPipe); kznuqzahyx
} kznuqzahyx
Succes=0;Flag=0;EndDialog(hDlg,TRUE);return(TRUE); kznuqzahyx
} kznuqzahyx
if(Succes==1&&LOWORD(wParam)==IDC_EDIT1&& kznuqzahyx
HIWORD(wParam)==EN_UPDATE){ kznuqzahyx
GetDlgItemText(hDlg,IDC_ENIT1,(LPSTR)(Info.Text),BUFSIZE-64); kznuqzahyx
Info.Type=1;WriteFile(hPipe,(char*)&Info,sizeof(Infor),&ret,NULL); kznuqzahyx
} kznuqzahyx
break; kznuqzahyx
} kznuqzahyx
return(FALSE); kznuqzahyx
} kznuqzahyx
追问
hPipe=CreateFile("\\\\ServerName\\pipe\\buf") 
这里的ServerName应该怎么样命名。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式