命名管道包装器:如何知道客户端连接是否成功



我必须创建一个名为管道系统的客户端服务器。我使用命名管道包装器。

if (npClient == null)
npClient = new NamedPipeClient<NamedPipeExchangeClass>(CConstants.NAMEDPIPE_NAME);
npClient.Start();
npClient.Error += NpClient_Error;
npClient.Disconnected += NpClient_Disconnected;
npClient.ServerMessage += NpClient_ServerMessage;
npClient.WaitForConnection(3000);

我已经停止了服务器,没有得到任何错误。

那么在那之后客户端是连接还是不连接呢?请注意,3000是超时,因此,如果我不设置它,dll将无限期地等待它的连接。显然,我可以把它放在一个线程中,看看它是否退出使用一个变量。

但是我真的很惊讶,没有成员表明连接是否成功,甚至所有的函数都是void而不是bool。

我看过其他的帖子,他们建议使用互斥锁来检测服务器的存在。但是存在不代表有联系。

即使将消息推送到服务器(不存在)也不会导致任何错误。谢谢你的帮助

帕特里克

——EDIT——我已经看到,当客户端连接到服务器时,服务器发送一个空消息。我可以使用计时器来检测连接。但我还是觉得很奇怪在超时后无法知道客户端是否已连接

当不存在服务器时,Start方法将永久停留在这一行,您无法知道连接是否建立。

var handshake = PipeClientFactory.Connect<string, string>(_pipeName,_serverName);

所以如果你想继续使用这个包,你需要保证一个工作的服务器。我发现了一个类似的问题,它是在2018年提交的....

最新更新