簡體   English   中英

為什么用networkstream.write塊?

[英]Why networkstream.write block?

我有客戶端服務器項目。 我在從服務器向客戶端發送數據時遇到問題。

    private bool SendPack(object client, string data)
    {
        lock (this)
        {
            try
            {
                NetworkStream clientStream = tcpServer.GetStream();

                byte[] Pack= ClsEncryption.GetEncrypt(data);

                clientStream.Write(Pack, 0, Pack.Length);
                clientStream.Flush();

                return true;
            }

            catch
            {                    
                return false;
            }
        }
    }

雖然我使用鎖,但是當運行寫命令時,一切都崩潰了。 我的意思是什么也沒有發送,並且寫操作也不會返回(如阻塞)。 是否應該通過使用beginwrite來使用異步方法? 我如何檢查networkstream是否已准備好寫入並且不會阻塞。 我使用clientstream.canwrite,但沒有用。

我需要最快,最可靠的方式發送數據。 任何想法?

如果與此流同時在其他線程上進行讀取操作,並且讀取操作在同一實例上使用鎖,則線程可能會死鎖。 如果是這樣,請使用其他實例鎖定讀取和寫入操作或發送| 在lock語句之外讀取數據。

根據文檔,您可以使用CanWrite屬性:

if (clientStream.CanWrite)
{
    clientStream.Write(Pack, 0, Pack.Length);
    clientStream.Flush();
    return true;
}

暫無
暫無

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

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