C#命名管道
类库代码
using System;
using System.IO;
using System.IO.Pipes;
using System.Text;
namespace NamedPipeHelper
{
public abstract class NamedPipeInfo
{
/// <summary>
/// . 表示本机,可以用localhost、127.0.0.1、本机ip 都可以
/// </summary>
protected const string Host = ".";
protected const string ServerToClient = "ServeToClient";
protected const string ClientToServer = "ClientToServer";
protected string Recevie(string serveName, string host = Host)
{
using (var pipeClient = new NamedPipeClientStream(host, serveName, PipeDirection.In))
{
// 连接到服务器
pipeClient.Connect();
using (var sr = new StreamReader(pipeClient))
{
return sr.ReadToEnd();
}
}
}
protected void Send(string message, string serverName)
{
try
{
// 发送数据回去给他
using (var pipeServer = new NamedPipeServerStream(serverName, PipeDirection.Out))
{
pipeServer.WaitForConnection();
// 直接写进streamWriter发送和写进NamedPipeServerStream,都可以发送
//using (var sw = new StreamWriter(pipeServer))
//{
// sw.Write(message);
//}
using (var sw = new StreamWriter(pipeServer))
{
sw.AutoFlush = true;
byte[] buffer = Encoding.UTF8.GetBytes(message);
pipeServer.Write(buffer, 0, buffer.Length);
}
}
}
catch (Exception ex)
{
throw new Exception();
}
}
public abstract void SendMessage(string sendMessage);
public abstract string RecevieMessage();
}
public sealed class NamedPipeClient : NamedPipeInfo
{
public override string RecevieMessage()
{
return Recevie(ServerToClient);
}
public override void SendMessage(string sendMessage)
{
Send(sendMessage, ClientToServer);
}
}
public sealed class NamedPipeServer : NamedPipeInfo
{
public override string RecevieMessage()
{
return Recevie(ClientToServer);
}
public override void SendMessage(string sendMessage)
{
Send(sendMessage, ServerToClient);
}
}
}
客户端程序
using NamedPipeHelper;
using System;
namespace TestSocket
{
internal class Program
{
static void Main(string[] args)
{
var server = new NamedPipeClient();
var rec = server.RecevieMessage();
if (!string.IsNullOrEmpty(rec))
{
Console.WriteLine($"接受到服务器发来的:{rec}");
server.SendMessage("hello 我是客户端");
}
}
}
}
服务端程序
using System;
using NamedPipeHelper;
namespace TestSocket2
{
internal class Program
{
static void Main(string[] args)
{
var server = new NamedPipeServer();
server.SendMessage("你好我是服务器");
var rev = server.RecevieMessage();
if (!string.IsNullOrWhiteSpace(rev))
{
Console.WriteLine($"客户端发来{rev}");
}
}
}
}