【问题标题】:Rethrowing socket exceptions from device driver从设备驱动程序重新抛出套接字异常
【发布时间】:2011-09-07 06:20:34
【问题描述】:

我有一个远程设备的驱动程序,该驱动程序通过套接字与设备通信。驱动程序具有客户端可用于获取有关设备信息的属性。每个属性都使用驱动程序的私有读/写方法向设备发送查询并等待响应。

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

对于此类问题是否有任何设计模式或通用方法?每当客户端使用驱动程序属性时,处理异常似乎有点乏味。但话又说回来,我看到的唯一解决方法是在驱动程序上有一个布尔 HasError 属性。这实际上只是实际抛出异常并让客户端捕获它的间接解决方法。

【问题讨论】:

    标签: c# sockets


    【解决方案1】:

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

    例如

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

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

    例外仍然是必经之路,但您希望根据客户的上下文而不是您的上下文向客户提供有意义的消息。毕竟,当您使用套接字类时,您会得到 SocketExceptions:而不是 NDIS 异常或其他任何东西,这对您来说毫无意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2014-10-26
      • 1970-01-01
      • 2011-06-27
      • 2010-12-21
      相关资源
      最近更新 更多