c# -如何使用TcpClient避免死锁

本文关键字:死锁 TcpClient 何使用 | 更新日期: 2023-09-27 18:11:17

我目前正在尝试做一个小服务器,但我遇到了一个问题,我认为是死锁。我的问题是如何实际避免死锁问题在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#网络中的实际含义是什么?

c# -如何使用TcpClient避免死锁

您的案例中没有死锁。至少我看不见。为什么要有一个呢?
每台计算机都可以向另一台计算机发送任意数量的数据。数据将被存储在目标计算机的网络接收缓冲区中,直到某个软件获取它。一般来说,数据发送不受其他数据接收的影响。