📄 api.cpp
字号:
/*对服务器来说,管道实例实际就是一个句柄,用于
从本地或远程客户机应用接受一个连接请求。
1) 使用A P I函数C r e a t e N a m e d P i p e,创建一个命名管道实例句柄。
2) 使用A P I函数C o n n e c t N a m e d P i p e,在命名管道实例上监听客户机连接请求。
3) 分别使用R e a d F i l e和Wr i t e F i l e这两个A P I函数,从客户机接收数据,或将数据发给客户
机。
4) 使用A P I函数D i s c o n n e c t N a m e d P i p e,关闭命名管道连接。
5) 使用A P I函数C l o s e H a n d l e,关闭命名管道实例句柄。
服务器进程需要使用C r e a t e N a m e d P i p e这个A P I调用,创建一个命名管道实
例。
从C r e a t e N a m e d P i p e调用成功接收到一个句柄之后(亦即一个管道实例),便必须等待来
自一个命名管道客户机的连接。可使用C o n n e c t N a m e d P i p e这个A P I函数,来建立这个连接。
一个命名管道客户机成功建立了与服务器的连接之后,C o n n e c t N a m e d P i p e这个A P I调用便会
结束。随后,服务器可用Wr i t e F i l e函数,向客户机自由地发送数据;或者使用R e a d F i l e函数,从
客户机那里接收数据。服务器完成了与一个客户机的通信之后,便应调用D i s c o n n c t N a m e d P i p e函
数,以关闭此次通信会话。*/
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <winbase.h>
#include <winuser.h>
#include <io.h>
#include <string.h>
#include <stdio.h>
void main()
{
char buffer[256]; //缓冲区信息
DWORD Recv;
HANDLE servepipe;
//创建管道
if((servepipe=CreateNamedPipe("\\\\.\\Pipe\\COTWO", //管道名
PIPE_ACCESS_DUPLEX, //管道访问方式:双向
PIPE_TYPE_MESSAGE|PIPE_READMODE_BYTE|PIPE_WAIT, //消息流方式写入、读出
1,256,256, //最大实例数,输出缓冲区字节数,输入缓冲区字节数
1000,NULL))==INVALID_HANDLE_VALUE)
{
printf("CreateNamedPipe failed with error %d\n", GetLastError());//创建失败提示信息
return;
}
printf("System is running!\n");
if(ConnectNamedPipe(servepipe,NULL)==0) //建立命名管道客户机与服务器的连接
{
printf("ConnectNamedPipe failed with error %d\n", GetLastError()); //连接失败
CloseHandle(servepipe);
return;
}
while(1){
if(ReadFile(servepipe,buffer,sizeof(buffer),&Recv,NULL)<=0) //读取缓冲区信息
{
printf("ReadFile failed with error %d\n", GetLastError());
CloseHandle(servepipe);
return;
}
printf("%.*s\n",Recv,buffer);
}
/*if(DisconnectNamedPipe(servepipe)==0)
{
printf("DisconnectNamedPipe failed with error %d\n", GetLastError());
return;
}
CloseHandle(servepipe);*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -