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?我试着谷歌搜索,但找不到任何东西。
答案 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。
可在此处找到更多信息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);
}