如何处理套接字异常

时间:2015-07-26 13:27:47

标签: c# sockets

Socket tempSocket;
try
{
    IPAddress addr = IPAddress.Parse(ip);
    IPEndPoint endpt = new IPEndPoint(addr, port);
    tempSocket = new Socket(endpt.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
    tempSocket.Connect(endpt);
}
catch
{
    OnDisconnected("Connection Error");
    return false;
}

我的控制台程序一直崩溃,并显示错误消息,指出存在套接字异常,因为目标计算机主动拒绝连接。这很好,因为有时候另一端没有运行,这是正常的。我的问题是,我如何正确处理这个程序,以便程序不会崩溃,而只是返回False?我试着谷歌搜索,但找不到任何东西。 enter image description here

4 个答案:

答案 0 :(得分:4)

您的程序已经不会因您显示的代码而“崩溃”;即如果你捕获异常并从你的函数返回false。

您看到的窗口(“Exception Assistant”)是可选的,可以帮助您进行调试,如果您在Visual Studio之外运行程序,它将不会显示,或者关闭选项以始终在任何异常中进入代码。它可以在Debug =>中配置异常。

答案 1 :(得分:1)

你只需要捕获套接字异常并返回false。

catch (SocketException e) 
{
 return false;
}

您的代码将是这样的

Socket tempSocket;
try
{
    IPAddress addr = IPAddress.Parse(ip);
    IPEndPoint endpt = new IPEndPoint(addr, port);
    tempSocket = new Socket(endpt.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
    tempSocket.Connect(endpt);
}
catch (SocketException e) 
{
    OnDisconnected("Connection Error");
    return false;
}
catch (Exception e) 
{
    OnDisconnected("any other exception Error");
    return false;
}

答案 2 :(得分:0)

在Visual Studio for Socket异常中更改异常处理设置。转到DEBUG - >例外...,找到System.Net.Sockets.SocketException并取消选择Thrown。

enter image description here

可在此处找到更多信息https://msdn.microsoft.com/en-us/library/d14azbfh%28v=vs.120%29.aspx

当然,在Visual Studio之外运行应用程序时,不会出现此问题。

答案 3 :(得分:-1)

试试这个

catch (System.Net.Sockets.SocketException ex) 
{ 
 Console.WriteLine(ex.Message);
}

   Socket tempSocket;
   IPAddress addr = IPAddress.Parse(ip);
   IPEndPoint endpt = new IPEndPoint(addr, port);
   using (tempSocket = new Socket(endpt.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
            {
                tempSocket.Connect(endpt);
            }