为什么networkstream.write阻止?

时间:2011-08-21 08:30:16

标签: c# .net networking tcpclient

我有客户端服务器项目。我在从服务器向客户端发送数据时遇到问题。

    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使用asynch方法吗?如何检查网络流是否已准备好写入并且不会阻止。我使用clientstream.canwrite,但它没用。

我需要最快速,最可靠的方式来发送数据。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果在其他线程上对此流进行同时读取操作,并且如果读取操作在同一实例上使用锁定,则线程可能会死锁。 如果是这样,请使用不同的实例来锁定读写操作或发送|读取锁定语句之外的数据。

答案 1 :(得分:-1)

根据documentation,您可以使用CanWrite属性:

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