繁体   English   中英

C#StreamWriter / NetworkStream / TcpClient /闲置+5分钟后不发送数据

[英]C# StreamWriter / NetworkStream / TcpClient / Not sending data after idle for +5 min

我从NetworkStream设置StreamWriter / StreamReader连接来控制一块测试设备。 底层连接是TCP。

在此特定情况下,此连接保持空闲几分钟。 通过+5分钟后,当我调用streamWriter.writeLine(...) ,然后刷新,没有数据从我的计算机发送到测试设备(在wireshark上观看数据包)。 在空闲时间之前和期间,不交换数据包。 没有FIN,或RST数据包等......

调试我的streamWriter对象,它似乎仍然有效( connected = true等...)

我有问题确定我的StreamWriter / NetworkStream / TcpClient对象的哪个部分超时或关闭w / out发送FIN或RST消息以正式关闭连接。

这是失败的代码的缩写版本:

private void button1_Click(object sender, EventArgs e)
{
        TcpClient client;
        NetworkStream networkStream;
        System.IO.StreamReader streamReader;
        System.IO.StreamWriter streamWriter;
        string outputString;

        client = new TcpClient("555.555.555.555", 5025);
        client.ReceiveTimeout = 5000;
        networkStream = client.GetStream();
        streamReader = new System.IO.StreamReader(networkStream);
        streamWriter = new System.IO.StreamWriter(networkStream);

        //This section works fine, every time
        streamWriter.WriteLine("*IDN?\n");     //Ask for equipment identification
        streamWriter.Flush();
        outputString = streamReader.ReadLine();
        Console.WriteLine("First Attempt: Connected to: {0}", outputString);

        System.Threading.Thread.Sleep(301000);  //Simulate idle connection time

        //The read in this section fails if the sleep above is longer than 5 minutes
        streamWriter.WriteLine("*IDN?\n");     //Ask for equipment identification
        streamWriter.Flush();
        outputString = streamReader.ReadLine();
        Console.WriteLine("Second Attempt: Connected to: {0}", outputString);
}

当我尝试从我写到设备的内容中读回响应时,会发现错误。 因为设备从未看到我的请求,所以我得到了读取超时错误。

如果我将睡眠时间改为不到5分钟,那么一切正常。

我已经考虑在套接字上实现某种保持活动状态,但我的理解是,在本机上,TCP连接将保持打开状态,直到任何一端关闭它。

我也不相信这是第三方网络问题,因为Wireshark显示没有发送/接收FIN或RST消息,而且我在5分钟后写入消息的尝试也没有被Wireshark看到,这也是我的电脑。

我在Windows 7计算机上运行Microsoft Visual Studio 2010,如果有帮助的话。

任何建议将不胜感激。 如果我需要进一步解释任何细节或澄清某些内容,也请告诉我。

此问题已通过实施时间检查来解决,如果超过几分钟没有流量,则会关闭并重新建立连接。 这是因为在主机上运行的防病毒软件是主动的,但没有通知,终止空闲套接字连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM