2016-01-22 35 views
0

基本上我使用命名管道機制進行客戶端/服務器交互。當我突然關閉服務器時,我正面臨着問題,它只是斷開命名管道。由於沒有事件處理程序用於處理來自服務器端的錯誤消息,因此它只是等待某個動作發生,只在該動作發生時知道連接狀態並嘗試重新連接。我的要求是,只要服務器出現故障,我的客戶端應用程序就會收到通知,並嘗試連接到服務器,直到服務器不再回來。 連接到服務器的代碼。如何通知客戶端應用程序從服務器斷開namedpipe?

 this._handle = 
     CreateFile(this._pipeName, 
        GENERIC_READ | GENERIC_WRITE, 
        0, 
        IntPtr.Zero, 
        OPEN_EXISTING, 
        FILE_FLAG_OVERLAPPED, 
        IntPtr.Zero); 

     // Could not create handle - server probably not running 
     if (this._handle.IsInvalid) 
      return; 

     this._connected = true; 
     // Start listening for messages 
     this._readThread = new Thread(new ThreadStart(Read)); 
     this._readThread.Start(); 

回答

0

ReadFileWriteFile將返回false,你需要檢查GetLastError()看到調用失敗的原因。您可以創建一個線程,每秒通過PeekNamedPipeGetNamedPipeInfo檢查管道。

相關問題