异常的“信息”在文化上是独立的吗?

时间:2010-04-08 13:27:54

标签: c# .net exception-handling

在我正在开发的应用程序中,我需要处理套接字超时与常规套接字异常不同。问题是许多不同的问题导致SocketException,我需要知道原因是什么。

没有报告内部异常,因此我需要处理的唯一信息是消息:

"A connection attempt failed because the connected party did not 
properly respond after a period of time, or established connection 
failed because connected host has failed to respond"

这个问题有一个普遍而具体的部分:

  1. 基于异常的文本表示来编写条件逻辑是否可以接受?
  2. 有没有办法避免需要处理异常?
  3. 以下示例代码......

    try 
    {
        IPEndPoint endPoint = null; 
        client.Client.ReceiveTimeout = 1000;
        bytes = client.Receive(ref endPoint);
    }
    catch( SocketException se )
    {
        if ( se.Message.Contains("did not properly respond after a period of time") )
        {
            // Handle timeout differently..
        }
    }
    

    我想不时地停止“等待新数据”,这样我的工作线程就可以看看它是否被要求优雅地关闭 - 我宁愿避免套接字的跨线程终止提供这种机制。

2 个答案:

答案 0 :(得分:8)

当然是! SocketException中有更多描述性字段,您不应该执行字符串比较。 http://msdn.microsoft.com/library/system.net.sockets.socketexception_members.aspx,特别是:

  • 错误代码
  • NativeErrorCode
  • SocketErrorCode

答案 1 :(得分:2)

例外是与文化相关的,我有“德语”异常消息。 使用SocketErrorCode。