当前位置: 首页 > 知识库问答 >
问题:

关闭关联套接字后取消侦听任务

乌翔
2023-03-14

我有一个TcpListener,可以启动

public void Start()
{
    if (!Listening && !IsDisposed)
    {
        _socket.Bind(_localEndpoint);
        Task.Run(DoListen);
    }
}

private async Task DoListen()
{
    _socket.Listen();
    Listening = true;
    try
    {
        while (Listening)
        {
            var socket = await _socket.AcceptAsync().ConfigureAwait(false);
            NewConnection?.Invoke(new Connection(socket));
        }
    }
    catch (SocketException e)
    {
        Stop();
    }
    finally
    {
        Listening = false;
    }
}

停下来

public void Stop()
{
    _socket?.Close();
    IsDisposed = true;
    Listening = false;
}

如何取消通过调用Start()启动的任务?
通过使循环条件监听,我可以确保任务将在条件评估时停止。
然而,这只会发生在接受新连接之后。
我如何摆脱等待var等待_socket。接受Async()。配置等待(false);?如果关联的套接字在等待AcceptAsync()时关闭,会发生什么?谢谢你的回答!

共有1个答案

祁星阑
2023-03-14

使用C的令牌源。然后可以提供取消令牌(cts.Token)到方法DoListing(取消令牌令牌)。

在DoList1中,使用属性IsCenseationReporttedSocket检查同时循环中的取消,并使用AcceptAsync(CenseationToken)方法将令牌传递给Socket。

 类似资料:
  • 我最近一直在玩套接字,但是我遇到了一个问题…当我从服务器接收数据时,我得到一个“java.net.套接字异常:套接字关闭”异常。我没有在任何地方关闭套接字,事实上,我唯一使用关闭()的地方是扫描仪上从System.in读取文本; 以下是我的代码: 客户: 服务器: 数据包发送者: 客户端接收器: 数据包接收器:

  • 我正在为客户机发送对象到服务器,在服务器端修改该对象,并将其重新发送到客户机。将对象从客户机发送到服务器很好,它工作正常,但当我将对象发送回来时,它给出了异常,Socket关闭。这里是代码。IntString和ParentObj是我要发送对象的类。 服务器类 用于发送和接收对象的Send_recv类。

  • 问题内容: 我有一个使用简单套接字在两个系统之间传递某些字符的应用程序。我的Java应用程序作为服务器运行。我建立了良好的连接,甚至传递了一条消息。但是,发送完一条消息后,我的连接关闭。 从我可以看出来的好像是在关闭时,套接字本身正在关闭吗?!这很不好,因为我有多个要在同一连接上发送的消息。 我吃饱了吗?如何在Java中维护此连接? 问题答案: 是的,关闭任何作家/读者将关闭他们包装的所有其他作家

  • 如果我不关闭套接字: 客户端没有输出。服务器从不发送消息,或者客户端从不接收消息。 有人知道发生这种情况的可能原因吗?客户端使用一个线程接收消息,一个线程发送消息。客户端套接字在主客户端线程中创建,因此接收者和发送者线程使用当前套接字进行通信。 提前谢了。

  • **服务器** **客户** 并且我运行它,ip是环回(127.0.0.1),端口是7755。 客户端套接字的对等ip:127.0.0.1 客户端套接字的对等端口6311 -1 0 0 0 我的问题是,如果监听(服务器)套接字只处理客户端的连接,那么它的对等端不应该存在?那个错误的IP和端口是什么?只是垃圾值?

  • 因此,我有一个客户机wich连续发送和接收数据消息,wich工作正常,然而,当我关闭/停止客户机时,我会得到以下单行错误: 尽管我试图关闭插座--最终封闭了。现在我的问题是为什么我会收到这个错误,这个行为是否正常,以及如何正确处理这个错误。下面是我的代码: