首页 > 解决方案 > 网络上的命名管道:帐户限制

问题描述

我目前正在创建一个小型客户端 - 服务器应用程序,其中服务器位于同一网络中的一台机器上,客户端位于同一网络上的第二台(不同)机器上。

因此,我创建了一个如下所示的服务器代码:

PipeSecurity pipeSecurity = new PipeSecurity();
pipeSecurity.AddAccessRule(new PipeAccessRule("Everyone", PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow));
var server = new NamedPipeServerStream("PipesOfPiece", PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 0, 0, pipeSecurity);
server.WaitForConnection();
StreamReader reader = new StreamReader(server);
StreamWriter writer = new StreamWriter(server);
while (true) {
    var line = reader.ReadLine();
    writer.WriteLine(String.Join("", line.Reverse()));
    writer.Flush();
}

还有一个如下所示的客户端应用程序:

var client = new NamedPipeClientStream("DESKTOP-K7TUEGS", "PipesOfPiece");
client.Connect();
StreamReader reader = new StreamReader(client);
StreamWriter writer = new StreamWriter(client);

while (true) {
    string input = Console.ReadLine();
    if (String.IsNullOrEmpty(input)) break;
    writer.WriteLine(input);
    writer.Flush();
    Console.WriteLine(reader.ReadLine());
}

在本地测试这两个应用程序时,它们可以正常工作,但是如果我在同一网络中的两台不同机器上尝试它,客户端会收到以下错误:

Unhandled Exception: System.IO.IOException: Account restrictions are preventing this user from signing in. For example: blank passwords aren't allowed, sign-in times are limited, or a policy restriction has been enforced.

命名管道是否仅在两台机器都在域中时才起作用?我当前的设置是一个没有 Windows 域的 LAN,只有一个路由器。或者我如何设置每个人都能连接的管道服务器?

编辑:我还尝试禁用防火墙,但这并没有改变这种情况。

标签: c#named-pipes

解决方案


推荐阅读