0

Windows で名前付きパイプを使用して基本サーバーを作成しようとしています。パイプを接続しようとすると問題が発生します(私は推測します)。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(){
    HANDLE p1, p2;
    printf("Server...");
    p1 = CreateNamedPipe(TEXT("\\\\.\\PIPE\\pipe1"),PIPE_ACCESS_INBOUND,PIPE_TYPE_BYTE|PIPE_WAIT,3,0,0,0,NULL);
    p2 = CreateNamedPipe(TEXT("\\\\.\\PIPE\\pipe2"),PIPE_ACCESS_OUTBOUND,PIPE_TYPE_BYTE|PIPE_WAIT,3,0,0,0,NULL);
    if(p1 == INVALID_HANDLE_VALUE || p2 ==  INVALID_HANDLE_VALUE ) { printf("pipe fail");exit(2);}
    printf("1. Pipes created");
    ConnectNamedPipe(p1,NULL);
    ConnectNamedPipe(p2,NULL);
    printf("2. Pipes connected");


    DisconnectNamedPipe(p1);
    DisconnectNamedPipe(p2);
    CloseHandle(p1);
    CloseHandle(p2);
    printf("3. Pipes disconnected & closed");

    printf("exit server...");

    return 0;

}

プログラムを実行しても何も印刷されず、手動で停止すると Server...1. Pipes created(IDEコンソール-Eclipseで)印刷されるか、プログラムを直接実行すると同じように印刷され、保持されます。

4

1 に答える 1

3

ここでタンゴをするのに2人かかります。名前付きパイプを開くには、CreateFile() を呼び出す別のプログラムを作成する必要があります。そうして初めて、サーバー プログラムでの ConnectNamedPipe() 呼び出しが完了します。テスト プログラムで 2 つのパイプを使用することは避けてください。パイプは双方向であるため、1 つのパイプでやり取りするだけで済みます。複数のクライアントをサポートしたい場合は、パイプ接続が確立された後に ConnectNamedPipe を再度呼び出すだけです。その時点で、重複した I/O またはスレッドを使用することも重要になります。

名前付きパイプに関する MSDN の記事に含まれているサンプル コードを参照してください。サーバー コードとクライアント コードの両方を記述する方法を示します。

于 2012-10-18T12:58:23.117 に答える