1、服务端C#
private const String MY_PIPE_NAME = "__MY__PIPE__TEST__";
private const int BUFFER_SIZE = 1024;
NamedPipeServerStream pipe;
StreamWriter writer;
String msg = "Message is comming";
private void PipeCreate()
{
if (pipe != null && pipe.IsConnected)
{
pipe.Close();
}
pipe = new NamedPipeServerStream(MY_PIPE_NAME, PipeDirection.InOut, 1, PipeTransmissionMode.Message, PipeOptions.None);
if (pipe == null)
{
textBox1.Text = textBox1.Text + "Pipe is null";
return;
}
if (pipe.IsConnected)
{
textBox1.Text = textBox1.Text + "Pipe is already connected";
return;
}
pipe.WaitForConnection();
textBox1.Text = textBox1.Text + "Pipe is ready to connect\r\n";
}
private void PipeWrite()
{
if (pipe!=null && pipe.IsConnected)
{
if(writer==null)
{
//关闭BOM(Byte Order Mark 0xfeff)
UnicodeEncoding unicodeWithoutBom = new System.Text.UnicodeEncoding(false, false);
writer = new StreamWriter(pipe, unicodeWithoutBom);
//写完后直接flush,会阻塞
writer.AutoFlush = true;
}
writer.Write(msg);
textBox1.Text = textBox1.Text + "Pipe message sent \r\n";
}
else
{
textBox1.Text = textBox1.Text + "Pipe is not connected \r\n";
}
}
private void PipeClose()
{
if (pipe!=null && pipe.IsConnected)
{
writer.Close();
pipe.Close();
writer = null;
pipe = null;
}
}
2、客户端C#
private const String MY_PIPE_NAME = "__MY__PIPE__TEST__";
private const int BUFFER_SIZE = 1024;
NamedPipeClientStream pipe;
StreamReader reader;
private void PipeConnect()
{
if (pipe != null && pipe.IsConnected)
{
pipe.Close();
}
pipe = new NamedPipeClientStream(".", MY_PIPE_NAME, PipeDirection.InOut);
if (pipe != null)
{
if (!pipe.IsConnected)
{
pipe.Connect();
textBox1.Text = textBox1.Text + "\r\npipe is connected";
}
else
{
textBox1.Text = textBox1.Text + "\r\npipe is already connected";
}
}
else
{
textBox1.Text = textBox1.Text + "\r\npipe is null";
}
}
private void PipeRead()
{
if (pipe.IsConnected)
{
if (reader == null)
{
reader = new StreamReader(pipe, Encoding.Unicode);
}
char[] buffer = new char[BUFFER_SIZE];
int byteRead = reader.Read(buffer, 0, BUFFER_SIZE);
String msgTxt = new String(buffer, 0, byteRead);
textBox1.Text = textBox1.Text + "\r\nPipe msg received: " + msgTxt;
}
else
{
textBox1.Text = textBox1.Text + "\r\nPipe is not connected";
}
}
private void PipeClose()
{
if (reader != null)
{
reader.Close();
reader = null;
}
if (pipe != null && pipe.IsConnected)
{
pipe.Close();
}
textBox1.Text = textBox1.Text + "\r\npipe is closed";
}