【问题标题】:TCP listener stops listeningTCP 侦听器停止侦听
【发布时间】:2016-11-25 17:20:30
【问题描述】:

我们目前在 Windows 服务中托管了一个 TCP 侦听器。它似乎会以某个随机间隔停止侦听,显然,当客户端随后发出请求时,它会被拒绝。我试过把所有的任务都拿出来,问题仍然存在。不会引发异常,因此不会将任何内容写入事件日志。

public void Run()
{
    var tcpDetail = Task.Run(() => _settingsHelper.GetTcpDetail());

    if (tcpDetail != null)
    {
        var listener = new TcpListener(tcpDetail.Result.ListeningAddress, tcpDetail.Result.ListeningPort);

        listener.Start();

       while (true)
        {
            var tcpClient = listener.AcceptTcpClient();

            try
            {
                Task.Run(() => ProcessClient(tcpClient));

            }
            catch (Exception ex)
            {
                EventLog.WriteEntry(AppDomain.CurrentDomain.FriendlyName, ex.Message);
                if (tcpClient.Client != null && tcpClient.Connected)
                {
                    tcpClient.Close();
                }                        
            }
        }
    }
}


 private void ProcessClient(TcpClient client)
{
    try
    {
        var networkStream = client.GetStream();
        var reader = new StreamReader(networkStream);


        var networkStream = client.GetStream();
        var reader = new StreamReader(networkStream);

        var request = reader.ReadToEnd();

        if (!string.IsNullOrEmpty(request))
        {
            var xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(request);
            _someService.Execute(xmlDocument);
        }

    }
    catch (Exception ex)
    {
        EventLog.WriteEntry(AppDomain.CurrentDomain.FriendlyName, ex.Message);
        if (client.Client != null && client.Connected)
        {
            client.Close();
        }
    }
    finally
    {
        if (client.Client != null && client.Connected)
        {
            client.Close();
        }
    }
}

【问题讨论】:

    标签: c# sockets tcp windows-services


    【解决方案1】:

    事实证明,这种行为是由于服务重新启动而发生的,而我正在停止监听。在 OnStop 函数中调用停止监听器解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多