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 @ 2024-03-01 17:16  Senya  阅读(121)  评论(0)    收藏  举报