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 非常に参考になりました!ありがとうございます。 |