簡體   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