首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么TcpClient.Connect()抛出System.AggregateException

为什么TcpClient.Connect()抛出System.AggregateException
EN

Stack Overflow用户
提问于 2019-12-12 16:46:22
回答 2查看 153关注 0票数 0

我试图使用以下代码检查到本地主机TCP服务器(ActiveMQ代理)的TCP连接:

代码语言:javascript
运行
复制
string host = "localhost";
int port = 61616;
using (TcpClient tcpClient = new TcpClient())
{
    try
    {


        Task t = Task.Run(() => {
            tcpClient.Connect(host, port);
        });
        Console.WriteLine("Connected.");
        TimeSpan ts = TimeSpan.FromMilliseconds(150);
        if (!t.Wait(ts))
        {
            Console.WriteLine("The timeout interval elapsed.");
            Console.WriteLine("Could not connect to: {0}", port);// ((IPEndPoint)tcpClient.Client.RemoteEndPoint).Port.ToString());
        }
        else
        {
            Console.WriteLine("Port {0} open.", port);
        }
     }
    catch (UnauthorizedAccessException )
    {
        Console.WriteLine("Caught unauthorized access exception-await behavior");
    }
    catch (AggregateException )
    {
        Console.WriteLine("Caught aggregate exception-Task.Wait behavior");
    }

我停止了本地主机服务器(ActiveMQ broker),并尝试运行上述代码。它把System.AggregateException扔了。当我启动服务器并运行代码时,它将连接到服务器。

根据documentation of TcpClient.Connect的说法,它将抛出以下内容之一:

  • ArgumentNullException
  • ArgumentOutOfRangeException
  • SocketException
  • ObjectDisposedException
  • SecurityException
  • NotSupportedException

为什么要抛出System.AggregateException

EN

回答 2

Stack Overflow用户

发布于 2019-12-12 17:08:00

代码语言:javascript
运行
复制
Task t = Task.Run(() => {
    tcpClient.Connect(host, port);
});

包装您的.Connect()电话。Task.Run()总是向AggregateException抛出真正的异常。为了解决这个问题,要么检查异常,要么更好地使用.Connect()的异步变体

代码语言:javascript
运行
复制
Task t = tcpClient.ConnectAsync(host, port);

而不是。

票数 0
EN

Stack Overflow用户

发布于 2019-12-12 19:06:26

我最后做的是:

代码语言:javascript
运行
复制
tcpClient.ReceiveTimeout = 5000;
 tcpClient.SendTimeout = 5000;
 tcpClient.Connect(host, port);
 catch (SocketException) {
                Console.WriteLine("Could not connect to: {0}", port);
                Console.WriteLine("Socket exception. Check host address and port.");
            }

好像起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59309236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档