none
名前付きパイプでBeginReadを中断 RRS feed

  • 質問

  • 名前付きパイプでアプリ間通信の処理を作っているのですが、BeginWriteでサーバに対して送信処理を行うことができません。

    処理としては、サーバから送信されたコマンドをクライアントで受信するだけなんですが、

    クライアントとが切断したことをサーバに通知したいと思い、InOutによる双方向通信に変更しようと考えています。

    client = new NamedPipeClientStream
                (".", "test", PipeDirection.InOut, PipeOptions.Asynchronous);

    上記で接続後、client.BeginRead~client.EndReadでサーバーからの受信を待機しているのですが、

    client.BeginReadが実行され、client.EndReadが呼ばれるまでの間は、クライアントからサーバーに対して

    送信処理(client.BeginWrite)を実行することができません。

    PipeDirection.Outにすればサーバ側には正常に送信できました。

    また、client.BeginRead~client.EndReadを実行しなければ、正常に送信できることも確認致しました。

    双方向で通信したいので、client.BeginReadを実行後、一度この処理を止めてclient.BeginWriteを実行したいのですが、

    client.BeginReadの中断方法が分かりません。

    宜しくお願い致します、

    2015年8月28日 5:25

回答

  • SafePipeHandleとって、CancelIOExあたりをP/Invokeしてみてはいかがでしょう。

    #個人的には、Socketの方が好きです。
    #pipeはimpersonationできるくらいしか利点がないですねぇ。


    jzkey

    • 回答の候補に設定 星 睦美 2015年9月10日 4:25
    • 回答としてマーク hys73 2015年9月28日 18:26
    2015年8月28日 7:05

すべての返信

  • SafePipeHandleとって、CancelIOExあたりをP/Invokeしてみてはいかがでしょう。

    #個人的には、Socketの方が好きです。
    #pipeはimpersonationできるくらいしか利点がないですねぇ。


    jzkey

    • 回答の候補に設定 星 睦美 2015年9月10日 4:25
    • 回答としてマーク hys73 2015年9月28日 18:26
    2015年8月28日 7:05
  • 無事解決することができました。

    大変遅くなりましたがありがとうございました。

    2015年9月28日 18:27