簡體   English   中英

在c#中重用TcpClient

[英]Reuse a TcpClient in c#

我們有一個設備通過無線網絡接受ascii消息,然后用值響應,我已經在c#的Windows Forms 2010解決方案中成功實現了這一點。

我寫這個作為測試解決方案來證明技術,並且設備的實際調用將在Motorola MC55手持設備上進行。

我現在已經在Visual Studio 2008中編寫了一個額外的測試解決方案並將其安裝到設備上,但是每次在移動設備上調用時,與TcpClient的連接大約需要30秒,而在Windows解決方案上幾乎是即時的。

這太慢了,所以我開始考慮重用TcpClient,但沒有取得任何成功,並想知道是否有其他人有類似的問題,並詢問他們如何解決它,或者是否有人可以提供任何有關如何重用的建議一個TcpClient所以每次我想打電話時都不需要創建一個新的。

連接的代碼如下所示......

     public static string GetValueFromDevice(string deviceIPAddress, int devicePort, string messageSentToDevice)
    {
        string returnValue = "";

        try
        {
            TcpClient client = new TcpClient(deviceIPAddress, devicePort);

            byte[] inData = System.Text.Encoding.ASCII.GetBytes(messageSentToDevice);
            NetworkStream stream = client.GetStream();
            stream.Write(inData, 0, inData.Length);

            byte[] outData = new Byte[256];
            int bytes = stream.Read(outData, 0, outData.Length);
            returnValue = System.Text.Encoding.ASCII.GetString(outData, 0, bytes);

            stream.Close();
            client.Close();
        }
        catch (Exception ex)
        {
            returnValue = ex.Message;
        }

        return returnValue;
    }

只要您願意,您可以讓TcpClient打開狀態。 保持clientstream變量作為類的一部分(而不是在函數中),並且在完成之前不要調用Close()

您可以持久化並重新使用客戶端並流式傳輸並將代碼放入單獨的線程中。

但是,我不相信客戶端需要大約30秒來初始化。 我發現在使用ActiveSync連接時TCP客戶端的啟動速度很慢,但是如果你只有一個無線連接,它應該立即啟動。

所以還要檢查你的網絡設置。 在使用Active Sync進行首次VS部署和調試會話后,Visual Studio能夠重新使用確定的無線IP地址,並通過無線TCP / IP運行后續部署/調試會話(如果PC上的ActiveSync設置為允許AS期間的數據連接連接)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM