Maison >développement back-end >C++ >Comment les canaux nommés peuvent-ils faciliter la communication inter-processus dans une simple application console C# ?

Comment les canaux nommés peuvent-ils faciliter la communication inter-processus dans une simple application console C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-14 12:46:48571parcourir

How Can Named Pipes Facilitate Inter-Process Communication in a Simple C# Console Application?

Une application console C# simple démontrant les canaux nommés

Les canaux nommés offrent une méthode robuste de communication inter-processus (IPC) au sein d'un seul système. Cet exemple présente une application console C# de base dans laquelle deux processus échangent des messages à l'aide de canaux nommés.

Structure de candidature

L'application comprend deux programmes : l'un initie la communication en envoyant un message au second, qui répond ensuite. Les deux fonctionnent simultanément pour un échange continu de messages.

Mise en œuvre du code

Le code C# suivant illustre l'implémentation :

<code class="language-csharp">using System;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleAppIPC
{
    class Program
    {
        static void Main(string[] args)
        {
            // Initiate the server process
            StartServer();
            Task.Delay(1000).Wait(); // Brief delay to ensure server is ready

            // Client-side connection and communication
            using (var client = new NamedPipeClientStream("PipesOfPiece"))
            {
                client.Connect();
                using (var reader = new StreamReader(client))
                using (var writer = new StreamWriter(client))
                {
                    while (true)
                    {
                        string input = Console.ReadLine();
                        if (string.IsNullOrEmpty(input)) break;
                        writer.WriteLine(input);
                        writer.Flush();
                        Console.WriteLine(reader.ReadLine());
                    }
                }
            }
        }

        static void StartServer()
        {
            Task.Factory.StartNew(() =>
            {
                using (var server = new NamedPipeServerStream("PipesOfPiece"))
                {
                    server.WaitForConnection();
                    using (var reader = new StreamReader(server))
                    using (var writer = new StreamWriter(server))
                    {
                        while (true)
                        {
                            string line = reader.ReadLine();
                            writer.WriteLine(string.Join("", line.Reverse()));
                            writer.Flush();
                        }
                    }
                }
            });
        }
    }
}</code>

Flux opérationnel

Le client se connecte au canal nommé "PipesOfPièce", établissant une connexion avec le serveur. Les messages sont envoyés via un StreamWriter et reçus via un StreamReader. Dans cet exemple, le serveur inverse le message reçu avant de le renvoyer au client, illustrant un modèle de communication simple. Le client affiche alors le message inversé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn