相关疑难解决方法(0)

C#中的多线程NamePipeServer

嗨,
我想使用NamedPipeServerStream,这是.NET 3.5中用于namedpipe通信的新功能.我想写多线程管道服务器.它是默认处理还是我应该为此编写代码.我的管道服务器应该一次处理多个请求

任何解决方案或代码?

.net c# multithreading named-pipes

15
推荐指数
2
解决办法
2万
查看次数

C#:异步NamedPipeServerStream的理解

我试图找到异步NamedPipeServerStream的任何好的和明确的例子,找不到任何适合我的.

我想让NamedPipe Server异步接受来自客户端的消息.客户很简单,对我来说很好.但我找不到服务器的例子,或者无法理解它是如何工作的.

现在据我所知,我需要创建NamedPipeServerStream对象.我们开工吧:

namedPipeServerStream = new NamedPipeServerStream(PIPENAME, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, BUFFERSIZE, BUFFERSIZE);
Run Code Online (Sandbox Code Playgroud)

似乎工作.但我不知道,我是否必须使用PipeSecurity或PipeAccessRule?我呢?我的服务器将作为本地系统中的Windows服务.

接下来是什么?我想我需要使用BeginWaitForConnection进行异步连接.让我们来看看:

namedPipeServerStream.BeginWaitForConnection(WaitForConnectionAsyncCallback, <some strange thing>);
Run Code Online (Sandbox Code Playgroud)

问题1:这是什么"奇怪的东西"?如何使用它?

问题2:我应该这样做

while(true)
{
namedPipeServerStream.BeginWaitForConnection(WaitForConnectionAsyncCallback, <some strange thing>);
}
Run Code Online (Sandbox Code Playgroud)

让我的服务器总是等待连接?或者我需要以其他方式做到这一点?

然后......让我们来看看WaitForConnectionAsyncCallback函数:

private void WaitForConnectionAsyncCallback(IAsyncResult result)
        {
            Console.WriteLine("Client connected.");
            byte[] buff = new byte[BUFFERSIZE];
            namedPipeServerStream.Read(buff, 0, namedPipeServerStream.InBufferSize);
            string recStr = General.Iso88591Encoding.GetString(buff, 0, namedPipeServerStream.InBufferSize);
            Console.WriteLine("   " + recStr);
            namedPipeServerStream.EndWaitForConnection(result);
        }
Run Code Online (Sandbox Code Playgroud)

..当然这不起作用.因为我不知道如何从流中接收字符串.怎么样?现在它引发了一个InvalidOperationException:

管道还没有连接.

那么如何使用NamedPipeServerStream组织异步工作呢?

c# asynchronous named-pipes

4
推荐指数
1
解决办法
7299
查看次数

如何使用命名管道发送多个对象?

我正在尝试使用命名管道从服务器向客户端发送 4 个参数 - 一个整数、一个布尔值和两个字符串。我尝试过不同的方法,但仍然没有成功。第一种方法 - 我只是将所有参数转换为字符串并尝试像这样发送,但在客户端上我收到的所有参数均为空:

服务器代码:

   static void StartServer()
        {
            var server = new NamedPipeServerStream("PipesEnroll", PipeDirection.InOut);

                while (true)
                {
                    server.WaitForConnection();
                    StreamWriter writer = new StreamWriter(server);
                    string terminalTemplate;
                    string matcherTemplate;
                    int mathVersionNumber = 9;
                    int numberFingers;
                    bool isOk = Enroll.EnrollWithoutWCF(retrievedList, mathVersionNumber, out terminalTemplate, out matcherTemplate, out numberFingers);

                    writer.WriteLine(isOk.ToString());
                    writer.WriteLine(terminalTemplate);
                    writer.WriteLine(matcherTemplate);
                    writer.WriteLine(numberFingers.ToString());
                    writer.Flush();

                    server.Disconnect();
           }
Run Code Online (Sandbox Code Playgroud)

客户端代码:

                   using (var client = new NamedPipeClientStream(".", "PipesEnroll", PipeDirection.InOut))
                    {
                        client.Connect();
                        StreamReader reader = new StreamReader(client);

                          bool isOK = Convert.ToBoolean(reader.ReadLine());
                          string terminalTemplate = reader.ReadLine();
                          string …
Run Code Online (Sandbox Code Playgroud)

c# serialization stream named-pipes deserialization

1
推荐指数
1
解决办法
7223
查看次数