ロゴ メインコンテンツへ
RSSフィード
「ソフトウェア開発」に関連する記事一覧

名前付きパイプのプロセス間通信をサーバー側 C#、クライアント側 C++ で書く

2016/09/27
(この記事の文字数: 127)

C++ 名前付きパイプによるプロセス間通信の小さいサンプルの記事で載せた C++ のIPCサンプルで、サーバー側を C# にしたくなったので、C# に置き換えました。挙動は全く同じです。

ソースコードを載せておきます。

サーバー側の C# コード


using System.IO;
using System.IO.Pipes;

namespace PicSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var server = new NamedPipeServerStream("mynamedpipe");
            System.Console.WriteLine("クライアント起動待ち..");
            server.WaitForConnection();
            StreamWriter streamWriter = new StreamWriter(server);
            string sendMessage = string.Empty;
            do
            {
                System.Console.Write("送信する文字を入力(Endで終了): ");
                sendMessage = System.Console.ReadLine();
                streamWriter.Write(sendMessage);
                streamWriter.Flush();
                server.WaitForPipeDrain();
            } while (sendMessage != "End");

            server.Dispose();
        }
    }
}

クライアント側の C++ コード


#include <Windows.h>
#include <iostream>

void main()
{
    HANDLE pipeHandle = CreateFile(L"\\\\.\\pipe\\mynamedpipe", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (pipeHandle == INVALID_HANDLE_VALUE)
    {
        std::cout << "パイプ作成に失敗" << std::endl;
        return;
    }

    std::cout << "サーバーから受信開始" << std::endl;

    // 文字列受信
    char recvBuffer[256];    //受信バッファ
    do
    {
        recvBuffer[0] = '\0';
        DWORD recvBuffer;
        ReadFile(pipeHandle, recvBuffer, sizeof(recvBuffer), &recvBuffer, NULL);
        if (recvBuffer[0] == '\0')
        {
            continue;
        }
        recvBuffer[readBytes] = '\0';
        std::cout << "受信: " << recvBuffer << std::endl;
    } while (strcmp(recvBuffer, "End") != 0);

    CloseHandle(pipeHandle);
}


  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

コメント(1 件)


1(ID: 3935894762)
2022-12-12 11:26

非常に参考になりました!ありがとうございます。
逆バージョン
C++サーバー側
C#クライアント側
もあると嬉しいです。


コンテンツロード: 0.0083 sec
Copyright(C)2006-2024 puarts All Rights Reserved