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"; }