c# - 从远程计算机连接到 namedpipeserver
问题描述
我想使用 namedpipeserver/client 在网络中两台计算机上的两个应用程序之间进行通信。该网络是 SOHO 架构,因此安全性不是那么重要,我们目前只是在尝试让系统启动并运行。
我编写了一个打开服务器(在计算机 A 上)的任务栏应用程序和一个连接到服务器(在计算机 B 上)的 winform 应用程序。在同一台计算机上运行两者可以给我一个功能交互。
在两台机器上尝试会出现错误“System.IO.IOException:“Der Benutzername oder das Kennwort ist falsch。”(英文:“用户或密码不正确”)
我已经搜索了高低,发现了一些有趣的文章,例如:
NamedPipeClientStream 在 session 0 下无法访问 NamedPipeServerStream
我相应地更改了服务器的安全设置:
PipeSecurity pipeSa = new PipeSecurity();
// Set the pipesecurity
pipeSa.SetAccessRule(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null),
PipeAccessRights.ReadWrite, AccessControlType.Allow));
// Alternative with "everyone"
// pipeSa.SetAccessRule(@"Jeder", PipeAccessRights.ReadWrite, AccessControlType.Allow));
serverPipeStream = new NamedPipeServerStream(
pipeName,
PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Message,
PipeOptions.Asynchronous,
10,
10,
pipeSa);
可惜没有成功。我还检查了两台机器上防火墙的端口设置,无法连接。任何有关如何进一步解决此问题或我做错了什么的提示将不胜感激。
解决方案
尝试:
var sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
var account = (NTAccount)sid.Translate(typeof(NTAccount));
var rule = new PipeAccessRule(
account.ToString(),
PipeAccessRights.FullControl,
AccessControlType.Allow);
var securityPipe = new PipeSecurity();
securityPipe.AddAccessRule(rule);
var pipeserver = new NamedPipeServerStream(
Name,
PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Message,
PipeOptions.None,
0,
0,
securityPipe)
为我工作得很好。
推荐阅读
- java - 如何为 LiveData 查询 Room 数据库
在传递变量时 - postgresql - 无法使用 Docker 连接我的 postgres 数据库
- python - 如何为python程序跨平台设置内存限制?
- python - 在多线程 PyQt5 应用程序的异常中输入 pdb 时避免段错误?
- consistency - 哪些编译器为生成的 asm 代码提供保证(保证)?
- markdown - 在pandoc markdown的项目符号之间插入空行?
- java - 平方数的方法参数的困难
- api - 没有密码的xray rest api身份验证
- javascript - 在 Firestore 查询中获得重复的结果?
- python - 从树莓派发送数据