[英]named pipe windows behaves
我正在尝试使用Windows中的命名管道创建基本服务器。 尝试连接管道时出现问题(我怀疑)。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main(){
HANDLE p1, p2;
printf("Server...");
p1 = CreateNamedPipe(TEXT("\\\\.\\PIPE\\pipe1"),PIPE_ACCESS_INBOUND,PIPE_TYPE_BYTE|PIPE_WAIT,3,0,0,0,NULL);
p2 = CreateNamedPipe(TEXT("\\\\.\\PIPE\\pipe2"),PIPE_ACCESS_OUTBOUND,PIPE_TYPE_BYTE|PIPE_WAIT,3,0,0,0,NULL);
if(p1 == INVALID_HANDLE_VALUE || p2 == INVALID_HANDLE_VALUE ) { printf("pipe fail");exit(2);}
printf("1. Pipes created");
ConnectNamedPipe(p1,NULL);
ConnectNamedPipe(p2,NULL);
printf("2. Pipes connected");
DisconnectNamedPipe(p1);
DisconnectNamedPipe(p2);
CloseHandle(p1);
CloseHandle(p2);
printf("3. Pipes disconnected & closed");
printf("exit server...");
return 0;
}
运行该程序时,它不会打印任何内容,而当我手动停止它时,它只会打印Server...1. Pipes created
Server...1. Pipes created
(在我的IDE控制台-Eclipse中),或者如果我直接运行它,它会打印出相同的内容,然后保存它。
探戈需要两个人。 您将需要编写另一个调用CreateFile()的程序以打开命名管道。 只有这样,服务器程序中的ConnectNamedPipe()调用才会完成。 避免在测试程序中使用两个管道,管道是双向的,因此您只需要一个管道就可以来回通信。 如果要支持多个客户端,则只需在建立管道连接后再次调用ConnectNamedPipe。 在这一点上,使用重叠的I / O或线程也变得很重要。
请看一下有关命名管道的MSDN文章中包含的示例代码。 它显示了如何编写服务器和客户端代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.