问题标签 [namedpipeserverstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1865 浏览

c# - 退出被阻塞等待传入管道流的应用程序

我有一个应用程序在线程中运行 NamedPipeServerStream 并等待其上的连接,如下所示:

应用程序总是在等待新的连接,但是当我尝试终止应用程序时,进程挂起对 WaitForConnection 的调用。

我试过中止有问题的线程,但它不会杀死应用程序。

如何告诉 NamedPipeServerStream 停止侦听连接?

编辑:

我可以看到 NamedPipeServerStream 有一个名为的方法,EndWaitForConnection但它需要一个对 an 的引用IAsynchResult,我从哪里得到那个对象?

0 投票
0 回答
996 浏览

c# - C# 中的多线程、多客户端 NamedPipeServer

我试图构建一个多线程的命名管道服务器/客户端。代码库基于这个线程,Multithreaded NamePipeServer in C#

真正的问题是,我需要一个双向管道来向 cleint 写确认。为此,ProcessClientThread我尝试StreamWriter使用输入创建pipeStream并写入它,但我收到“Broken Pipe”异常。管子PipeDirection.InOut已经好了。

任何想法?

0 投票
2 回答
486 浏览

.net - 在 Sony Vegas 脚本中使用 System.IO.Pipes.NamedPipeClientStream

当我尝试在 Sony Vegas Script 中使用 NamedPipeClientStream 时,我得到了异常

这就是我的代码的样子:

我已经完整安装了最新的 .Net Framework (4.5)。索尼维加斯从哪里获得组件。

有什么建议么?

0 投票
1 回答
3916 浏览

c# - Mono 中的 NamedPipeServerStream

我正在尝试将 C#.Net 项目转换为 Mono。在 Mono 中不支持 NamedPipeServerStream 和 NamedPipeClientStream 类并抛出 Unhandle 异常。你能帮帮我吗?

代码:

未处理的异常:

System.IO.IOException:创建命名管道时出错:错误代码 -1
在 System.IO.Pipes.UnixNamedPipe.EnsureTargetFile(System.String 名称)[0x0001f] 在 /Users/builder/data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono -2-10/build-root/mono-2.10.11/_build/mono-2.10.11.git/mcs/class/System.Core/System.IO.Pipes/PipeUnix.cs:131 在 System.IO.Pipes .UnixNamedPipeServer..ctor(System.IO.Pipes.NamedPipeServerStream 所有者,System.String pipeName,Int32 maxNumberOfServerInstances,PipeTransmissionMode 传输模式,PipeAccessRights 权限,PipeOptions 选项,Int32 inBufferSize,Int32 outBufferSize,HandleInheritability 可继承性)[0x00012] in /Users/builder/数据/车道/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono-2-10/build-root/mono-2.10.11/_build/mono-2.10.11.git/ mcs/class/System.Core/System.IO.Pipes/PipeUnix.cs:265 在 System.IO.Pipes。NamedPipeServerStream..ctor (System.String pipeName, PipeDirection direction, Int32 maxNumberOfServerInstances, PipeTransmissionMode transmissionMode, PipeOptions options, Int32 inBufferSize, Int32 outBufferSize, System.IO.Pipes.PipeSecurity pipeSecurity, HandleInheritability 可继承性, PipeAccessRights additionalAccessRights) [0x0004b] in /Users/ builder/data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono-2-10/build-root/mono-2.10.11/_build/mono-2.10.11。 git/mcs/class/System.Core/System.IO.Pipes/NamedPipeServerStream.cs:100 在 System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName,PipeDirection 方向,Int32 maxNumberOfServerInstances,PipeTransmissionMode 传输模式,PipeOptions 选项, Int32 inBufferSize, Int32 outBufferSize, System.IO.Pipes.PipeSecurity pipeSecurity,HandleInheritability 可继承性)[0x00000] in :0 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName,PipeDirection 方向,Int32 maxNumberOfServerInstances,PipeTransmissionMode 传输模式,PipeOptions 选项,Int32 inBufferSize,Int32 outBufferSize,System.IO.Pipes。 PipeSecurity pipeSecurity) [0x00000] in :0 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName, PipeDirection direction, Int32 maxNumberOfServerInstances, PipeTransmissionMode transmissionMode, PipeOptions options, Int32 inBufferSize, Int32 outBufferSize) [0x00000] in :0在 System.IO.Pipes.NamedPipeServerStream..ctor(System.String pipeName,PipeDirection 方向,Int32 maxNumberOfServerInstances,PipeTransmissionMode 传输模式,PipeOptions 选项)[0x00000] 中:0 at (wrapper remoting-invoke-with-check) System.IO.Pipes.NamedPipeServerStream:.ctor (string,System.IO.Pipes.PipeDirection,int,System.IO.Pipes.PipeTransmissionMode,System.IO.Pipes.PipeOptions ) 在 ConsoleTestPipeApp1.Program.ListenForPipeServer () [0x00000] 在 /Users/Vadivelu/Project/Service_Test/ConsoleTestPipeApp1/ConsoleTestPipeApp1/Program.cs:21 在 ConsoleTestPipeApp1.Program.Main (System.String[] args) [0x00000] 在 / Users/Vadivelu/Project/Service_Test/ConsoleTestPipeApp1/ConsoleTestPipeApp1/Program.cs:16 [错误] 致命的未处理异常:System.IO.IOException:创建命名管道时出错:System.IO.Pipes.UnixNamedPipe.EnsureTargetFile 处的错误代码 -1 (System.String 名称)[0x0001f] 在 /Users/builder/data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono-2-10/build-root/mono -2.10。11/_build/mono-2.10.11.git/mcs/class/System.Core/System.IO.Pipes/PipeUnix.cs:131 在 System.IO.Pipes.UnixNamedPipeServer..ctor (System.IO.Pipes.NamedPipeServerStream所有者,System.String pipeName,Int32 maxNumberOfServerInstances,PipeTransmissionMode 传输模式,PipeAccessRights 权限,PipeOptions 选项,Int32 inBufferSize,Int32 outBufferSize,HandleInheritability 可继承性)[0x00012] 在 /Users/builder/data/lanes/mono-mac-ui-refresh-2 -10/2baeee2f/source/bockbuild/profiles/mono-2-10/build-root/mono-2.10.11/_build/mono-2.10.11.git/mcs/class/System.Core/System.IO.Pipes /PipeUnix.cs:265 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName, PipeDirection 方向, Int32 maxNumberOfServerInstances, PipeTransmissionMode transmissionMode, PipeOptions options, Int32 inBufferSize, Int32 outBufferSize,System.IO.Pipes.PipeSecurity pipeSecurity,HandleInheritability 可继承性,PipeAccessRights additionalAccessRights) [0x0004b] 在 /Users/builder/data/lanes/mono-mac-ui-refresh-2-10/2baeee2f/source/bockbuild/profiles/mono- 2-10/build-root/mono-2.10.11/_build/mono-2.10.11.git/mcs/class/System.Core/System.IO.Pipes/NamedPipeServerStream.cs:100 在 System.IO.Pipes。 NamedPipeServerStream..ctor (System.String pipeName, PipeDirection direction, Int32 maxNumberOfServerInstances, PipeTransmissionMode transmissionMode, PipeOptions options, Int32 inBufferSize, Int32 outBufferSize, System.IO.Pipes.PipeSecurity pipeSecurity, HandleInheritability 可继承性) [0x00000] in :0 在 System.IO .Pipes.NamedPipeServerStream..ctor (System.String pipeName, PipeDirection 方向, Int32 maxNumberOfServerInstances,PipeTransmissionMode transmissionMode, PipeOptions options, Int32 inBufferSize, Int32 outBufferSize, System.IO.Pipes.PipeSecurity pipeSecurity) [0x00000] in :0 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName, PipeDirection direction, Int32 maxNumberOfServerInstances, PipeTransmissionMode transmissionMode, PipeOptions options, Int32 inBufferSize, Int32 outBufferSize) [0x00000] in :0 at System.IO.Pipes.NamedPipeServerStream..ctor (System.String pipeName, PipeDirection direction, Int32 maxNumberOfServerInstances, PipeTransmissionMode transmissionMode, PipeOptions options) [0x00000] in :0 at (wrapper remoting-invoke-with-check) System.IO.Pipes.NamedPipeServerStream:.ctor (string,System.IO.Pipes.PipeDirection,int,System.IO.Pipes.PipeTransmissionMode,System.IO.Pipes .PipeOptions) 在 ConsoleTestPipeApp1.Program.ListenForPipeServer () [0x00000] 在 /Users/Vadivelu/Project/Service_Test/ConsoleTestPipeApp1/ConsoleTestPipeApp1/Program.cs:21 在 ConsoleTestPipeApp1.Program.Main (System.String[] args) [0x00000] 在/Users/Vadivelu/Project/Service_Test/ConsoleTestPipeApp1/ConsoleTestPipeApp1/Program.cs:16

0 投票
2 回答
912 浏览

multithreading - C# 中的多线程服务器实现

我正在创建一个 Windows 服务,该服务具有一个组件,该组件侦听命名管道以与从用户空间运行的程序进行交互。我已将此答案中的代码用作多线程服务器实现的基础,但是我从在紧密循环中调用的 ProcessNextClient 操作中获得了强烈的代码气味,如下所示。真的没有比重复捕获 IOException 并重试更好的方法来知道何时将另一个流的开口添加到命名管道?

0 投票
1 回答
704 浏览

.net - 在 .NET 命名管道中指定默认等待超时

我在 C# 中使用 NamedPipeServerStreams,我们的客户将使用 Win32 CreateFile 和 WaitNamedPipe 方法建立连接。

以前我们的服务器也是 Win32 并且在调用 CreateNamedPipe() 时将“DefaultTimeOut”指定为管道构造的一部分。

根据我所读/所见,我的理解是客户端随后继承此超时值并在调用 WaitNamedPipe 时使用它。

Microsoft 的CreateNamedPipe的 MSDN 文档对DefaultTimeOut 参数有以下描述 -

*nDefaultTimeOut [in] 默认超时值,以毫秒为单位,如果 WaitNamedPipe 函数指定 NMPWAIT_USE_DEFAULT_WAIT。命名管道的每个实例都必须指定相同的值。*

当更改为使用 .NET NamedPipeServerStream 时,似乎无法将此默认超时值传递给构造函数(或其他方式),并且我的客户端现在经常在 WaitNamedPipe 信号量上超时,而以前没有。如果不更改我们所有的客户来指定我们希望避免的自己的超时,我似乎无法在 .NET 中找到这样做的方法。.NET NamedPipe 代码肯定只是将 Win32 API 包装在下面吗?

0 投票
2 回答
1877 浏览

.net - 允许从远程客户端访问命名管道服务器

我想问你如何设置从远程客户端对我的命名管道服务器的可能访问。到目前为止,我认为 NamedPipes 只能用于同一台计算机上的进程间通信,但基于http://msdn.microsoft.com/en-us/library/windows/desktop/aa365150%28v=vs.85% 29.aspx应该可以通过设置 PIPE_ACCEPT_REMOTE_CLIENTS / PIPE_REJECT_REMOTE_CLIENTS 来允许/不允许从远程计算机访问。我没有找到如何在 .NET 中设置此功能的简单方法。我想 PipeSecurity 可以以某种方式用于它,但我没有找到简单的方法。

我当前的解决方案允许在当前机器上访问所有用户到我的命名管道。有人可以改进我的解决方案以允许从另一台机器访问吗?

谢谢。

0 投票
0 回答
2484 浏览

c# - 命名管道客户端在 unity3d 中不起作用

我编写了这个 C# 代码,具有 namedPipeServer 和 NamedPipeClient,具有异步读写设置,相互连接。这两个代码都在我使用的 Visual Studio 2010 上完美运行,读写运行良好,在运行时没有任何应用程序冻结。

但我希望客户端在 unity3d 中运行。我遇到的问题是在 Unity3D 中实现的客户端代码。当我使用 Write_to_Server_Async(string message) 时,服务器端的读取不会被调用,只有在我退出 Unity3d 时才会被调用(我通常已经结束了它的进程)。我可以告诉 Unity3D 有什么问题,因为确切的代码在 Visual Studio 中完美运行,所以我知道我的代码以正确的方式实现。我听说unity3d 并没有真正使用真正的线程,除非用户手动创建一个,但即使这样也没有解决问题。我的猜测是 Unity3D 开发人员可能已经创建了他们的 .NET 库 3.5 版本(听起来很奇怪(确实解释了为什么他们仍然没有采用 4.5)),或者他们必须以某种方式构建他们的库,默认功能类似于 NamedPipeClientStream。BeginWrite 无法创建自己的真实线程。但话又说回来,我不确定它是否是线程的问题。

目前,我希望任何人都能提出很好的解释。

确保在 unity3d 中将 Debug.WriteLine 替换为 UnityEngine.Debug.Log。

下面是Client Main方法代码和类

Asynchronus_NamedPipe_Client 类

服务器端Main方法实现

服务器端类 -----

0 投票
3 回答
4718 浏览

c# - 检查 NamedPipeServerStream 是否在客户端启动的方法

我有一个使用 NamedPipeClientStream 的客户端和一个使用 NamedPipeServerStream 的服务器。

客户端可能在服务器之前启动,当它调用 clientStream.Connect(timeout) 时,我得到了预期的 TimeoutException。

有什么方法可以在调用 Connect 之前检查是否有 NamedPipeServerStream 监听以防止异常?

0 投票
1 回答
4503 浏览

c# - NamedPipeServerStream 接收 MAX=1024 字节,为什么?

我正在使用 NamedPipeStream、客户端和服务器,我正在从客户端向服务器发送数据,数据是包含二进制数据的序列化对象。

当服务器端接收数据时,它总是有 MAX 1024 大小,而客户端发送更多!所以当尝试序列化数据时,这会导致以下异常:“未终止的字符串。预期的分隔符:”。路径‘数据’,第 1 行,位置 1024。”

服务器缓冲区大小定义为:

我在用着 :

读取功能:

我在客户端看不到可以定义或更改缓冲区大小的地方!

任何想法?!