我目前正在尝试制作一个小服务器,但我遇到了一个问题,我相信是一个僵局。我的问题是如何在C#Tcp中实际避免死锁问题?让我告诉你一些事情。
public static void SendString (TcpClient klient, string message) {
byte[] byteBuffer = Encoding.UTF8.GetBytes(message);
NetworkStream netStream = klient.GetStream();
netStream.Write(byteBuffer, 0, byteBuffer.Length);
netStream.Write(new byte[] { separator }, 0, sizeof(byte));
netStream.Flush();
}
public static string AcceptString (TcpClient klient) {
List<int> buffer = new List<int>();
NetworkStream stream = klient.GetStream();
int readByte;
while ((readByte = stream.ReadByte()) != 0)
buffer.Add(readByte);
return Encoding.UTF8.GetString(buffer.Select<int, byte>(b => (byte)b).ToArray(), 0, buffer.Count);
}
当双方试图呼叫SendString()
(彼此)时,会发生死锁吗?如果没有,究竟是什么导致死锁?我的意思是我知道什么是死锁(双方都在等待另一方的行动)但它在C#网络中的实际含义是什么?
答案 0 :(得分:2)
你的情况没有僵局。至少我看不到任何东西。为什么要有一个? 每台计算机都可以向任何计算机发送任何数量的数据。数据将存储在目标计算机的网络接收缓冲区中,直到某个软件获取它为止。通常,数据发送不受接收其他数据的影响。