作者:肖波
用Remoting做进程间通讯,效率较低,于是做了一个采用管道技术进行进程间通讯的例子,在1.8G 双核计算机上每秒钟可以发送180M数据。下面给出源码
Server端的管道类
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Collections.Generic;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Text;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Threading;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using Pipe.Win32;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
namespace Pipe.Server
![](https://i-blog.csdnimg.cn/blog_migrate/50828477840f9be8f01bb82af691c7d1.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public delegate void ReceiveMessageFunc(System.IO.MemoryStream m);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public delegate void ReceiveMessageErrorFunc(Exception e);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public class PipeServer : IDisposable
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
enum State
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Idle = 0,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Begining = 1,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Reading = 2,
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
String m_PipeName;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint m_Handle;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint m_BufferSize;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
State m_State = State.Idle;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
const ulong SYNC_HEAD = 0xf8c7a1ca13db307e;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
const uint NMPWAIT_USE_DEFAULT_WAIT = 0x00000000;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
const int DEFAULT_BUFFER_SIZE = 1024;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
ReceiveMessageFunc m_ReceiveMessage;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
ReceiveMessageErrorFunc m_ReceiveMessageError;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public ReceiveMessageFunc OnReceiveMessage
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
get
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return m_ReceiveMessage;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
set
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_ReceiveMessage = value;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public ReceiveMessageErrorFunc OnReceiveMessageError
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
get
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return m_ReceiveMessageError;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
set
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_ReceiveMessageError = value;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public String PipeName
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
get
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return m_PipeName;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public uint BufferSize
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
get
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return m_BufferSize;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public String PipeUri
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
get
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return @"\\.\pipe\" + m_PipeName;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
private bool IsSyncHead(byte[] buf, uint len, out int msgLen)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
msgLen = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (len != 12)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return false;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (SYNC_HEAD != BitConverter.ToUInt64(buf, 0))
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return false;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
msgLen = BitConverter.ToInt32(buf, sizeof(ulong));
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (msgLen < 0)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return false;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return true;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
private void ProcessMessage(System.IO.MemoryStream m)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (OnReceiveMessage != null)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m.Position = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
OnReceiveMessage(m);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
private void ThreadProc()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public PipeServer(String pipeName)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_PipeName = pipeName;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_BufferSize = DEFAULT_BUFFER_SIZE;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public PipeServer(String pipeName, uint bufferSize)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_PipeName = pipeName;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_BufferSize = bufferSize;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void Listen()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
while (true)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
try
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.CreateNamedPipe(PipeUri, (uint)FileAccess.PIPE_ACCESS_DUPLEX,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
(uint)PipeMode.PIPE_READMODE_MESSAGE | (uint)PipeMode.PIPE_TYPE_MESSAGE | (uint)PipeMode.PIPE_WAIT,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.PIPE_UNLIMITED_INSTANCES, m_BufferSize, m_BufferSize, NMPWAIT_USE_DEFAULT_WAIT, new SecurityAttributes());
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle == NTKernel.INVAILD_HANDLE)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
throw new Exception(String.Format("CreateNamedPipe fail, err={0}", NTKernel.GetLastError()));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (!NTKernel.ConnectNamedPipe(m_Handle, IntPtr.Zero))
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint err = NTKernel.GetLastError();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.CloseHandle(m_Handle);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
throw new Exception(String.Format("ConnectNamedPipe fail, err={0}", err));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
byte[] buf = new byte[m_BufferSize];
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint relSize = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
int msgLen = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
int offset = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
System.IO.MemoryStream m = new System.IO.MemoryStream();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
while (NTKernel.ReadFile(m_Handle, buf, m_BufferSize, out relSize, IntPtr.Zero))
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
switch (m_State)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
case State.Idle:
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (IsSyncHead(buf, relSize, out msgLen))
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_State = State.Begining;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
break;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
case State.Begining:
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
offset = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m = new System.IO.MemoryStream();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m.Write(buf, 0, (int)relSize);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
offset += (int)relSize;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (offset >= msgLen)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_State = State.Idle;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (offset == msgLen)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
ProcessMessage(m);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (OnReceiveMessageError != null)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
OnReceiveMessageError(new Exception("Message overflow!"));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_State = State.Reading;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
break;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
case State.Reading:
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m.Write(buf, 0, (int)relSize);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
offset += (int)relSize;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (offset >= msgLen)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_State = State.Idle;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (offset == msgLen)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
ProcessMessage(m);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (OnReceiveMessageError != null)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
OnReceiveMessageError(new Exception("Message overflow!"));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
break;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.DisconnectNamedPipe(m_Handle);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.CloseHandle(m_Handle);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
System.Threading.Thread.Sleep(10);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
catch (Exception e)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (OnReceiveMessageError != null)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
OnReceiveMessageError(e);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void Dispose()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
lock (this)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle != NTKernel.INVAILD_HANDLE)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.CloseHandle(m_Handle);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.INVAILD_HANDLE;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
~PipeServer()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Dispose();
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7b7aed00e816ae30877ead37665598a2.gif)
}
Client 端的管道类
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Collections.Generic;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Text;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Diagnostics;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using Pipe.Win32;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
namespace Pipe.Client
![](https://i-blog.csdnimg.cn/blog_migrate/50828477840f9be8f01bb82af691c7d1.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public class PipeClient : IDisposable
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
String m_PipeName;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
String m_ComputerName;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint m_Handle;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint m_BufferSize;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
const ulong SYNC_HEAD = 0xf8c7a1ca13db307e;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
byte[] m_SendBuf;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b49df3b1f6a3619e7842ecabb18675d6.gif)
Propertys
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
private void Connect()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
int file_not_find_times = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
while (true)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.CreateFile(PipeUri, (uint)FileAccess.GENERIC_READ | (uint)FileAccess.GENERIC_WRITE,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
0, new SecurityAttributes(), (uint)CreateMode.OPEN_EXISTING, 0, 0);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle == NTKernel.INVAILD_HANDLE)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint err = NTKernel.GetLastError();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (err == NTKernel.ERROR_FILE_NOT_FOUND)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (file_not_find_times++ < 2000)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
System.Threading.Thread.Sleep(20);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
continue;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (err == NTKernel.ERROR_PIPE_BUSY)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.WaitNamedPipeA(PipeUri, 20);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
continue;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
throw new Exception(String.Format("Create File for pipe fail, err={0}", NTKernel.GetLastError()));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
break;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
private void WriteBuf(byte[] buf)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint relSize;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (!NTKernel.WriteFile(m_Handle, buf, (uint)buf.Length, out relSize, IntPtr.Zero))
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
throw new Exception(String.Format("Send message to pipe fail, err={0}", NTKernel.GetLastError()));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void Close()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
lock (this)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle != NTKernel.INVAILD_HANDLE)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
bool ret = NTKernel.CloseHandle(m_Handle);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.INVAILD_HANDLE;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public PipeClient(String pipeName, uint bufferSize)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_PipeName = pipeName;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_BufferSize = bufferSize;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.INVAILD_HANDLE;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_SendBuf = new byte[bufferSize];
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void Dispose()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Close();
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void Send(byte[] buf)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle == NTKernel.INVAILD_HANDLE)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Connect();
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
//Build Message Head
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
byte[] syncHead = BitConverter.GetBytes(SYNC_HEAD);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
byte[] length = BitConverter.GetBytes(buf.Length);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
byte[] lengthBuf = new byte[syncHead.Length + length.Length];
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
syncHead.CopyTo(lengthBuf, 0);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
for (int i = syncHead.Length; i < lengthBuf.Length; i++)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
lengthBuf[i] = length[i - syncHead.Length];
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
WriteBuf(lengthBuf);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
//write content
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (buf.Length < m_BufferSize)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
WriteBuf(buf);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
//the length of buf lardge than m_BufferSize
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
int offset = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
int len = Math.Min((int)m_BufferSize, buf.Length - offset);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
byte[] sendbuf;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
while (len > 0)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (len == m_BufferSize)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
sendbuf = m_SendBuf;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
sendbuf = new byte[len];
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
System.IO.MemoryStream m = new System.IO.MemoryStream(sendbuf);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m.Write(buf, offset, len);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m.Close();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
offset += len;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
len = Math.Min((int)m_BufferSize, buf.Length - offset);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
WriteBuf(sendbuf);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
~PipeClient()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Dispose();
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/7b7aed00e816ae30877ead37665598a2.gif)
}
NTKernel.cs
这个程序文件Client 和 Server 都要,封装了相应的API函数
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Collections.Generic;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Text;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
using System.Runtime.InteropServices;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
namespace Pipe.Win32
![](https://i-blog.csdnimg.cn/blog_migrate/50828477840f9be8f01bb82af691c7d1.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b49df3b1f6a3619e7842ecabb18675d6.gif)
Data Structures
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public class NTKernel
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public const uint PIPE_UNLIMITED_INSTANCES = 255;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public const uint INVAILD_HANDLE = 0xFFFFFFFF;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public const uint ERROR_FILE_NOT_FOUND = 2;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public const uint ERROR_PIPE_BUSY = 231;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
internal const uint INFINITE = 0xFFFFFFFF;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32", EntryPoint = "GetLastError", SetLastError = true, CharSet = CharSet.Unicode)]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern uint GetLastError();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32.dll", SetLastError = true)]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern uint CreateNamedPipe(string lpName, uint dwOpenMode,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint dwPipeMode, uint nMaxInstances, uint nOutBufferSize, uint nInBufferSize,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint nDefaultTimeOut, SecurityAttributes lpSecurityAttributes);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32.dll")]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern bool ConnectNamedPipe(uint hNamedPipe,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
IntPtr lpOverlapped);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32.dll")]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern bool DisconnectNamedPipe(uint hNamedPipe);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32.dll", SetLastError=true)]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern int WaitNamedPipeA (string lpNamedPipeName, int nTimeOut);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32.dll")]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern bool ReadFile(uint hFile, byte[] lpBuffer,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint nNumberOfBytesToRead, out uint lpNumberOfBytesRead, IntPtr lpOverlapped);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32.dll")]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern bool WriteFile(uint hFile, byte[] lpBuffer,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint nNumberOfBytesToWrite, out uint lpNumberOfBytesWritten,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
IntPtr lpOverlapped);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32.dll", SetLastError = true)]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern bool CloseHandle(uint hHandle);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
[DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public static extern uint CreateFile(
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
string lpFileName,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint dwDesiredAccess,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint dwShareMode,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
SecurityAttributes lpSecurityAttributes,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint dwCreationDisposition,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint dwFlagsAndAttributes,
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
int hTemplateFile
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b49df3b1f6a3619e7842ecabb18675d6.gif)
Mutex
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b49df3b1f6a3619e7842ecabb18675d6.gif)
Semaphore
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b49df3b1f6a3619e7842ecabb18675d6.gif)
Event
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
class Mutex : IDisposable
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
IntPtr m_Handle;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public Mutex(SecurityAttributes lpEventAttributes, bool bInitialOwner, string lpName)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.CreateMutex(lpEventAttributes, bInitialOwner, lpName);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle == IntPtr.Zero)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint err = NTKernel.GetLastError();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
throw new Exception(String.Format("Create Event fail, error={0}",
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
err));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public Mutex(bool bInitialOwner, string lpName)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.CreateMutex(null, bInitialOwner, lpName);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle == IntPtr.Zero)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint err = NTKernel.GetLastError();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
throw new Exception(String.Format("Create Event fail, error={0}",
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
err));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public bool WaitOne(uint dwMilliseconds)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
WaitForState waitForState = (WaitForState)NTKernel.WaitForSingleObject((uint)m_Handle, dwMilliseconds);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (waitForState == WaitForState.WAIT_OBJECT_0)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return true;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else if (waitForState == WaitForState.WAIT_TIMEOUT)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return false;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
throw new System.Threading.AbandonedMutexException();
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public bool WaitOne()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return WaitOne(NTKernel.INFINITE);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void ReleaseMutex()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.ReleaseMutex(m_Handle);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void Close()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
lock (this)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle != IntPtr.Zero)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (NTKernel.CloseHandle((uint)m_Handle))
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = IntPtr.Zero;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
~Mutex()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Dispose();
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b49df3b1f6a3619e7842ecabb18675d6.gif)
IDisposable Members
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public class Event : IDisposable
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
IntPtr m_Handle;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public Event()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public Event(SecurityAttributes lpEventAttributes, bool bManualReset, bool bInitialState, string lpName)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.CreateEvent(lpEventAttributes, bManualReset, bInitialState, lpName);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle == IntPtr.Zero)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
uint err = NTKernel.GetLastError();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
throw new Exception(String.Format("Create Event fail, error={0}",
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
err));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public bool Open(EventAccess dwDesiredAccess, bool bInheritHandle, string lpName)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = NTKernel.OpenEvent((uint)dwDesiredAccess, bInheritHandle, lpName);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle == IntPtr.Zero)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return false;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return true;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public WaitForState WaitFor(uint dwMilliseconds)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return (WaitForState)NTKernel.WaitForSingleObject((uint)m_Handle, dwMilliseconds);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public WaitForState WaitFor()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
return WaitFor(NTKernel.INFINITE);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void SetEvent()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.SetEvent(m_Handle);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void Release()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
NTKernel.ResetEvent(m_Handle);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
public void Close()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
lock (this)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (m_Handle != IntPtr.Zero)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (NTKernel.CloseHandle((uint)m_Handle))
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
m_Handle = IntPtr.Zero;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
~Event()
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Dispose();
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b49df3b1f6a3619e7842ecabb18675d6.gif)
IDisposable Members
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/7b7aed00e816ae30877ead37665598a2.gif)
}
客户端调用
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
byte[] buf = new byte[10240];
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
Pipe.Client.PipeClient client = new Pipe.Client.PipeClient("test", 102400);
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
for (int i = 0; i < 10000; i++)
![](https://i-blog.csdnimg.cn/blog_migrate/50828477840f9be8f01bb82af691c7d1.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
try
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
client.Send(buf);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
catch (Exception e)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Console.WriteLine(e.Message);
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
finally
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/7b7aed00e816ae30877ead37665598a2.gif)
}
服务器调用
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
static bool begin = true;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
static System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
static int count = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
static object lockObj = new object();
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
static void ReceiveMessage(System.IO.MemoryStream m)
![](https://i-blog.csdnimg.cn/blog_migrate/50828477840f9be8f01bb82af691c7d1.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
//Console.WriteLine(msg.Event);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
lock (lockObj)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (begin)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
watch.Start();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
begin = false;
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
count++;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
if (count == 10000)
![](https://i-blog.csdnimg.cn/blog_migrate/8e52f115e84d9d0b1ac2733d44320f17.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
watch.Stop();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
float len = m.Length;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Console.WriteLine(String.Format("{0} MB", (len * 10000 * 1000 / watch.ElapsedMilliseconds) / (1024 * 1024)));
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Console.WriteLine(String.Format("{0} ms", watch.ElapsedMilliseconds));
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6149c7ff1f37d28d10fd845090b8b08b.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/7b7aed00e816ae30877ead37665598a2.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
static void ReceiveMessageError(Exception e)
![](https://i-blog.csdnimg.cn/blog_migrate/50828477840f9be8f01bb82af691c7d1.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Console.WriteLine(e.Message);
![](https://i-blog.csdnimg.cn/blog_migrate/7b7aed00e816ae30877ead37665598a2.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a09df419e7f64d71aa338ac84cc2f8a.gif)
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/50828477840f9be8f01bb82af691c7d1.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
Pipe.Server.PipeServer server = new Pipe.Server.PipeServer("Test", 102400);
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
server.OnReceiveMessage = ReceiveMessage;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
server.OnReceiveMessageError = ReceiveMessageError;
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
server.Listen();
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c95254562ab8ac5d9a5e59650858817e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7b7aed00e816ae30877ead37665598a2.gif)
}
源码下载位置