1 private static async Task<String> IssueClientRequestAsync(string serverName, string message)
2 {
3 Console.WriteLine("进入IssueClientRequestAsync");
4 //NamedPipeClientStream 公开 System.IO.Stream 周围命名管道,支持同步和异步读取和写入操作。
5 //新实例初始化 System.IO.Pipes.NamedPipeClientStream 使用指定的管道和服务器名称,以及指定的管道方向和管道选项的类。
6 // 参数:
7 // serverName:
8 // 要连接的远程计算机的名称,或者为“.”,以指定本地计算机。
9 //
10 // pipeName:
11 // 管道的名称。
12 //
13 // direction:
14 // 确定管道方向的枚举值之一。(此处指定的管道方向是双向的)
15 //
16 // options:
17 // 确定如何打开或创建管道的枚举值之一。
18 using (var pipe = new NamedPipeClientStream(serverName, "PipeName", PipeDirection.InOut, PipeOptions.Asynchronous | PipeOptions.WriteThrough))
19 {
20 Console.WriteLine("Connect");
21 //连接到具有无限超时值的等待的服务器。
22 //必须在设置ReadMode之前连接
23 pipe.Connect();
24
25 Console.WriteLine("ReadMode");
26 //对象的读取模式
27 //指示是发送和读取的 消息流 的形式在管道中的数据,另外还有字节流(Byte)
28 pipe.ReadMode = PipeTransmissionMode.Message;
29
30 Console.WriteLine("request");
31 byte[] request = Encoding.UTF8.GetBytes(message);
32
33 Console.WriteLine("WriteAsync");
34 //将字节序列异步写入当前流,并将流的当前位置提升写入的字节数。
35 // buffer:
36 // 从中写入数据的缓冲区。
37 //
38 // offset:
39 // buffer 中的从零开始的字节偏移量,从此处开始将字节复制到该流。
40 //
41 // count:
42 // 最多写入的字节数。
43 await pipe.WriteAsync(request, 0, request.Length);
44
45 Console.WriteLine("response");
46 byte[] response = new byte[1000];
47
48 Console.WriteLine("ReadAsync");
49 //从当前流异步读取字节序列,并将流中的位置提升读取的字节数。
50 // buffer:
51 // 数据写入的缓冲区。
52 //
53 // offset:
54 // buffer 中的字节偏移量,从该偏移量开始写入从流中读取的数据。
55 //
56 // count:
57 // 最多读取的字节数。
58 int bytesRead = await pipe.ReadAsync(response, 0, response.Length);
59
60 Console.WriteLine("retuen");
61 return Encoding.UTF8.GetString(response, 0, bytesRead);
62 }
63 }
64
65 private static void NamedPipeClientStreamTest()
66 {
67 using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.In))
68 {
69
70 // Connect to the pipe or wait until the pipe is available.
71 Console.Write("Attempting to connect to pipe...");
72 pipeClient.Connect();
73
74 Console.WriteLine("Connected to pipe.");
75 Console.WriteLine("There are currently {0} pipe server instances open.", pipeClient.NumberOfServerInstances);
76 using (StreamReader sr = new StreamReader(pipeClient))
77 {
78 // Display the read text to the console
79 string temp;
80 while ((temp = sr.ReadLine()) != null)
81 {
82 Console.WriteLine("Received from server: {0}", temp);
83 }
84 }
85 }
86 }