首页 > 解决方案 > 读取和写入多个名为管道c#的消息的问题

问题描述

我正在使用 c# 在命名管道上练习我制作了客户端和服务器控制台应用程序,但问题是当我从客户端发送第一条消息时,服务器接收并输出它。但是第二条消息,它不会独立输出,而是覆盖第一条消息的第一个字符,例如 Message 1 : Client : NameNameName | 服务器:NameNameName 消息 2:客户端:堆栈 | 服务器:StackameName 这是代码 客户端

 using (NamedPipeClientStream pipe = new NamedPipeClientStream(".","Intern", PipeDirection.InOut))
        {

            pipe.Connect();
            
            if (pipe.IsConnected)
            {
                /*    StreamReader sr = new StreamReader(pipe);
                    StreamWriter sw = new StreamWriter(pipe);
                    sw.AutoFlush = true;
                    sw.WriteLine("Some info from client");*/
                Console.WriteLine("Connected to server");
                string msg = "";
                do
                {
                 //   if (!pipe.IsConnected) pipe.Connect();
                    Console.Write(" MESSAGE  = ");
                    msg= Console.ReadLine();
                    pipe.WriteAsync(Encoding.UTF8.GetBytes(msg), 0, msg.Length);
                    pipe.FlushAsync();
                } while (msg != "quit");
                pipe.Close();
            }
            Console.Read();

服务器 :

  NamedPipeServerStream pipe = new NamedPipeServerStream("Intern", PipeDirection.InOut);

           StreamReader sr = new StreamReader(pipe);
            StreamWriter sw = new StreamWriter(pipe);
            pipe.WaitForConnection();
            Console.WriteLine("Connected ! ");
        byte[] bufferr = new byte[1024];
        string delta = "";
        string msg = "";
        int k = 0;
        List<byte> msgList= new List<byte>();
        while (pipe.IsConnected)
        {
            pipe.Flush();
            bufferr.Initialize();
            msgList.Clear();
            msg = "";
            pipe.ReadAsync(bufferr, 0, bufferr.Length);
            while (bufferr[k]!='\0')
            {
                msgList.Add(bufferr[k]);
                Console.WriteLine("Character : " + bufferr[k]);
                k++;
            }
            byte[] msgE = new byte[msgList.Count];
            msgE = msgList.ToArray();
            k = 0;
            delta = Encoding.UTF8.GetString(msgE);
            Console.WriteLine(delta);
            msg = "";
            k = 0;
        }
        Console.Read();
    }

如您所见,我尝试了不同的方法来删除第一条消息,但它仍然通过缓冲区流式传输,我不知道为什么如果有人可以为我提供好的和完整的 c# 参考书,我在互联网上找不到特别是关于管道的信息 非常好感谢^^谢谢你:)

标签: c#.netpipelinenamed-pipes

解决方案


推荐阅读