C# - 如何使用TcpClient避免死锁?

时间:2015-09-03 19:06:07

标签: c# networking tcpclient tcplistener

我目前正在尝试制作一个小服务器,但我遇到了一个问题,我相信是一个僵局。我的问题是如何在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#网络中的实际含义是什么?

1 个答案:

答案 0 :(得分:2)

你的情况没有僵局。至少我看不到任何东西。为什么要有一个? 每台计算机都可以向任何计算机发送任何数量的数据。数据将存储在目标计算机的网络接收缓冲区中,直到某个软件获取它为止。通常,数据发送不受接收其他数据的影响。