2011-09-06 46 views
3

我有一个远程设备的驱动程序,并且驱动程序通过套接字与设备进行通信。驱动程序具有客户可用来获取设备信息的属性。每个属性使用驱动程序的私有读/写方法向设备发送查询并等待响应。从设备驱动程序返回的套接字异常

我想确定处理套接字异常的最佳方法。特别是,当客户使用其中一个属性来获取有关设备的信息时,我必须重新抛出读/写方法中发生的异常,否则客户会收到一个默认值,而不知道出了什么问题。

这种类型的问题是否有任何设计模式或常见方法?客户端使用驱动程序属性时,处理异常似乎有点繁琐。但是再次,我看到的唯一工作是在驱动程序上有一个布尔型的HasError属性。这实际上只是一个间接的解决方法,以便实际抛出异常并让客户端抓住它。

回答

0

您应该解释套接字异常并重新为客户端提供更多信息:他们不想考虑套接字问题。如果您的异常不能很好地映射到任何现有异常,请创建您自己的异常类型并返回信息性消息,例如“网络连接有问题”,而不是像“套接字读取错误”。

例如

try { 
    tcpClient = new TcpClient(address.ToString(), port); 
} catch (SocketException SE) { 
    throw new MyDriverException("Failed to connect to remote device"); 
} 

您当然可以从SocketException中添加一些细节到您自己的消息中以进行调试。

异常仍然是最佳选择,但您希望在您的上下文中为您的客户提供有意义的消息,而不是您的。毕竟,当你使用套接字类的时候,你会得到SocketExceptions:不是NDIS的异常或者什么,这对你来说什么都没有。