๐ป[C#]IPC ํต์ ํ๊ตฌ (Named Pipe)-3
๐ ๊ฐ๋ฐ ํ๊ฒฝ
๐ NamedPipeServerStream
NamedPipeServerStream ๋จผ์ NamePipe์ Server ๋ถ๋ถ์ ์์ฑ์๋ฅผ ๋ณด๋ฉด
1
public NamedPipeServerStream (string pipeName, System.IO.Pipes.PipeDirection direction);
string pipeName: ํ์ดํ์ ์ด๋ฆSystem.IO.Pipes.PipeDirection direction: ํ์ดํ์ ๋ฐฉํฅ
๋ฐฉํฅ์ ์ด๊ฑฐ ๊ฐ์๋ ์ด 3๊ฐ์ง๊ฐ ์์ผ๋ฉฐ
| Field | Description |
|---|---|
In | ํ์ดํ ๋ฐฉํฅ์ ์์ชฝ์ผ๋ก ์ง์ ํจ |
InOut | ํ์ดํ ๋ฐฉํฅ์ ์์ชฝ์ผ๋ก ์ง์ ํจ |
Out | ํ์ดํ ๋ฐฉํฅ์ ๋ฐ๊นฅ์ชฝ์ผ๋ก ์ง์ ํจ |
์ฌ๊ธฐ์ Server ์ชฝ์๋ Out์ ์ธ๊ฒ์ด๋ค. ํด๋น ํ์ดํ๊ฐ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด Out์ผ๋ก ์ง์ ํ๋ฉฐ ์ฐ๊ธฐ์ ์ฉ์ด๊ธฐ๋ ํ๋ค.
๐ NamedPipeClientStream
NamePipe ์ Cline ๋ถ๋ถ์ ์์ฑ์๋ฅผ ์ดํด๋ณด๋ฉด
1
public NamedPipeClientStream (string serverName, string pipeName, System.IO.Pipes.PipeDirection direction);
string serverName: ์๋ฒ ์ด๋ฆstring pipeName: ํ์ดํ์ ์ด๋ฆSystem.IO.Pipes.PipeDirection direction: ํ์ดํ์ ๋ฐฉํฅ
NamedPipeServerStream์ ์์ฑ์์ ๋ค๋ฅด๊ฒ string serverName ๋ผ๋ ๋ณ์๊ฐ ์๋๋ฐ ์๋ฒ๊ฐ ๋ก์ปฌ ์ปดํจํฐ์ ์๋๊ฒฝ์ฐ์๋ โ.โ ์ผ๋ก ๋ฃ์ด๋ ๋ฌด๋ฐฉํ๋ค! string pipeName ์๋ ์๋ฒ์ ๊ฐ์ ํ์ดํ์ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ฉฐ System.IO.Pipes.PipeDirection direction์ In์ผ๋ก ํ์ดํ๊ฐ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์ ์ด ๋๋ฉฐ ์ฝ๊ธฐ ์ ์ฉ์ด๊ธฐ๋ ํฉ๋๋ค.
๐ฅ๏ธ Named Pipe ๊ตฌํ
Naed Pipe Write Server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class NamedPipeWriter
{
public void WriteToPipe(string data)
{
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("Cat", PipeDirection.Out))
{
Console.WriteLine("Named Pipe ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค...");
pipeServer.WaitForConnection();
using (StreamWriter writer = new StreamWriter(pipeServer))
{
writer.AutoFlush = true;
writer.WriteLine(data);
Console.WriteLine("Named Pipe ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ์ต๋๋ค.");
}
}
}
}
Named Pipe Read Client
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class NamedPipeReader
{
public string ReadFromPipe()
{
using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "Cat", PipeDirection.In))
{
Console.WriteLine("Named Pipe ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฐ๊ฒฐ ์ค...");
pipeClient.Connect();
using (StreamReader reader = new StreamReader(pipeClient))
{
string data = reader.ReadLine();
Console.WriteLine("Named Pipe ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ต๋๋ค.");
return data;
}
}
}
}
์ฐ๊ณ / ์ฝ๋ ํด๋์ค๊ฐ ์์ผ๋ ์ด์ ์ฌ์ฉํ ํด๋์ค๋ฅผ ๋ง๋ค์๋ฉด
Program class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Program
{
static void Main()
{
NamedPipeWriter writer = new NamedPipeWriter();
NamedPipeReader reader = new NamedPipeReader();
// ์๋ก์ด ์ค๋ ๋์์ Named Pipe ์๋ฒ๋ฅผ ์์ํฉ๋๋ค.
Task.Run(() =>
{
writer.WriteToPipe("Night Mo ๋ฐ์ดํฐ ์ ์ฅ!");
});
// Named Pipe ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค.
string data = reader.ReadFromPipe();
Console.WriteLine($"Received from pipe: {data}");
}
}
