gpt4 book ai didi

.net - 命名管道用法。多个客户端,一台服务器,多个并行请求

转载 作者:行者123 更新时间:2023-12-03 14:55:50 25 4
gpt4 key购买 nike

我正在尝试在.NET中实现命名管道服务器。客户端将是C++。发送的数据的性质与问题无关。

我的第一个天真的实现看起来像:

using (NamedPipeServerStream stream = 
new NamedPipeServerStream(PipeName,
PipeDirection.InOut,
numberOfListeners,
PipeTransmissionMode.Message))
{
while (true)
{
try
{
stream.WaitForConnection();

var request = ReadRequest(stream);

var reply = Process(request);
WriteReply(stream, reply);
stream.WaitForPipeDrain();
}
catch (Exception ex)
{
//TO DO: log
}
}
}

我要达到这个权利吗?

当两个客户端同时打开连接时会发生什么?

它们将共享相同的流,并且数据将混合在一起吗?

如何避免这种情况?

关于此的任何想法或资源都将有所帮助。我对这个话题还很陌生。

最佳答案

您将希望服务器能够处理并发客户端连接,并且每个客户端都可以在管道的不同实例上连接到服务器,而不是像现在的代码那样尝试在一个管道实例上执行所有操作。客户端完成后,您想释放与该客户端交谈时使用的管道实例,而不是重用它。

This answer提供了一种执行此操作的伪代码概述。

还要注意,在消息模式下,您需要循环读取管道,直到IsMessageComplete属性变为true为止。这是保证您收到每条完整消息的唯一方法。还应注意,消息模式下的“消息”是指由发送方在对管道的一个Write调用中写入的字节流。

客户端流不会相互混淆:管道实例只有两端, THE 客户端和 THE 服务器。

关于.net - 命名管道用法。多个客户端,一台服务器,多个并行请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5584211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com