2016-01-22 72 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检查管道。

相关问题