C# NamedPipe传输测试

CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
string pipename = "testpipe";
Task tserver = Task.Run(async () =>
{
	NamedPipeServer server = new NamedPipeServer(pipename);
	await server.dowork(token);
});

Task tclient = Task.Run(async () =>
{
	NamedPipeClient client = new NamedPipeClient(pipename);
	await client.dowork(token);
});

await Task.Delay(10000);
cts.Cancel();
await Task.WhenAll(tserver, tclient);
"All Over".Dump();


class NamedPipeServer
{
	public NamedPipeServer(string pipename)
	{
		this._pipename = pipename;		
	}
	
	private string _pipename;
	
	public async Task dowork(CancellationToken token)
	{
		try
		{
			using (NamedPipeServerStream serverPipe = new NamedPipeServerStream(_pipename, PipeDirection.InOut))
			{
				"Server:  Wating for client connection...".Dump();
				await serverPipe.WaitForConnectionAsync(token);

				"Server:  Client connected".Dump();
				int cnt = 0;
				using (StreamReader reader = new StreamReader(serverPipe))
				using (StreamWriter writer = new StreamWriter(serverPipe))
				{
					while (!token.IsCancellationRequested)
					{
						string receivedMessage = await reader.ReadLineAsync();
						if (receivedMessage == null)
						{
							cnt++;
							if (cnt > 10) break;
						}
						else
						{
							$"Server:  Received message:  {receivedMessage}".Dump();
						}
						await Task.Delay(1);
					}
				}
			}
		}
		catch
		{
		}
	}
}


class NamedPipeClient
{
	public NamedPipeClient(string pipename)
	{
		this._pipename = pipename;
	}

	private string _pipename;
	
	public async Task dowork(CancellationToken token)
	{
		try
		{
			using (NamedPipeClientStream client = new NamedPipeClientStream(".", _pipename, PipeDirection.InOut))
			{
				"Client: Connecting to server".Dump();
				await client.ConnectAsync();
				"Client: Connected to server".Dump();
				
				using (StreamWriter writer = new StreamWriter(client))
				{
					while (!token.IsCancellationRequested)
					{
						string sendbuff = "hello world";
						await writer.WriteLineAsync(sendbuff);
						"Client: Sending to Server".Dump();
						await writer.FlushAsync();
						await Task.Delay(2000);
					}
				}
			}
		}
		catch
		{
		}
	}
}
posted @   Senya  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示