https://github.com/geloczi/ipc-anonymouspipes
Interprocess communication using anonymous pipes
https://github.com/geloczi/ipc-anonymouspipes
anonymuspipes interprocess-communication interprocess-communication-library ipc pipes
Last synced: 5 months ago
JSON representation
Interprocess communication using anonymous pipes
- Host: GitHub
- URL: https://github.com/geloczi/ipc-anonymouspipes
- Owner: geloczi
- License: mit
- Created: 2021-11-28T15:59:13.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-12-07T21:25:40.000Z (over 2 years ago)
- Last Synced: 2025-10-19T07:47:30.894Z (8 months ago)
- Topics: anonymuspipes, interprocess-communication, interprocess-communication-library, ipc, pipes
- Language: C#
- Homepage:
- Size: 51.8 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# IpcAnonymousPipes
Interprocess communication using anonymus pipes.
The goal of this project is to provide a simple framework to send and receive byte arrays over
anonymus pipes efficiently. You may use a serialization library of your choice on top of this to implement messaging.
- Targets .NET Standard 2.0
- Lightweight and easy to use
- Client-Server architecture
- One-to-one duplex communication
- Works with simple byte arrays
## Usage
### [NuGet package](https://www.nuget.org/packages/IpcAnonymousPipes/)
```
Install-Package IpcAnonymousPipes
```
### PipeServer
The server side PipeServer will create two anonymus pipes: input and output. The handles will be passed to the client app as process arguments.
```
void StartServer()
{
// Create pipe server
Server = new PipeServer();
// Start client process with command line arguments
Process.Start("MyClient.exe", Server.GetClientArgs());
// Receiving on background thread
Server.ReceiveAsync(stream =>
{
Console.WriteLine(Encoding.UTF8.GetString(stream.ReadToEnd()));
});
// Wait for client connection
Server.WaitForClient();
// Say Hi to the client
Server.Send(Encoding.UTF8.GetBytes("Hi!"));
}
```
### PipeClient
This is a minimal client implementation with a console application.
The Client will be disposed when the server sends a disconnect signal to this client.
```
static void Main(string[] args)
{
// Create pipe client
// The empty constructor parses command line arguments to get the pipe handles.
using (var Client = new PipeClient())
{
// Receiving on background thread
Client.ReceiveAsync(stream =>
{
Console.WriteLine(Encoding.UTF8.GetString(stream.ReadToEnd()));
});
// Read line from console, press ENTER to send
while (Client.IsConnected)
Client.Send(Encoding.UTF8.GetBytes(Console.ReadLine()));
}
}
```
## Example applications
You can find two **WPF applications** in the [repository](https://github.com/geloczi/ipc-anonymouspipes).
I wrote them in order to demonstrate the **two-way communication** between the server and the client.
### [ServerWpfApp](https://github.com/geloczi/ipc-anonymouspipes/tree/main/Examples/ServerWpfApp)
Download the source and build the solution. Then you can start the
[ServerWpfApp](https://github.com/geloczi/ipc-anonymouspipes/tree/main/Examples/ServerWpfApp)
project.
The ServerWpfApp project **does not reference ClientWpfApp** project, they are completely independent from each other.
My goal was to run the client inside a **standalone process**, so it **lives in it's own Application Domain**.
### [ClientWpfApp](https://github.com/geloczi/ipc-anonymouspipes/tree/main/Examples/ClientWpfApp)
The client
[ClientWpfApp](https://github.com/geloczi/ipc-anonymouspipes/tree/main/Examples/ClientWpfApp)
will be started automatically by ServerWpfApp.
You can send messages by typing into the textbox and pressing the *Send* button.