[英]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.