我有客户端服务器项目。我在从服务器向客户端发送数据时遇到问题。
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,但它没用。
我需要最快速,最可靠的方式来发送数据。 有什么想法吗?
答案 0 :(得分:0)
如果在其他线程上对此流进行同时读取操作,并且如果读取操作在同一实例上使用锁定,则线程可能会死锁。 如果是这样,请使用不同的实例来锁定读写操作或发送|读取锁定语句之外的数据。
答案 1 :(得分:-1)
根据documentation,您可以使用CanWrite
属性:
if (clientStream.CanWrite)
{
clientStream.Write(Pack, 0, Pack.Length);
clientStream.Flush();
return true;
}