C# 如果缓冲区中已经包含要在客户端处理的数据,如何阻止TCP发送

C# 如果缓冲区中已经包含要在客户端处理的数据,如何阻止TCP发送,c#,sockets,tcpclient,tcpserver,C#,Sockets,Tcpclient,Tcpserver,我一直在使用tcpsockets从服务器向客户端发送和接收数据 我正在使用以下代码 服务器 private string SendDataToClient(int currentStationSeq, int nextStationSeq, int SequenceOrder) { byte[] byData = System.Text.Encoding.ASCII.GetBytes(String.Format("{0},{1},{2}", curr

我一直在使用
tcpsockets
从服务器向客户端发送和接收数据

我正在使用以下代码

服务器

 private string SendDataToClient(int currentStationSeq, int nextStationSeq, int SequenceOrder)
    {          
        byte[] byData = System.Text.Encoding.ASCII.GetBytes(String.Format("{0},{1},{2}", currentStationSeq, nextStationSeq, SequenceOrder));
        Socket workerSocket = null;
        for (int i = 0; i < m_workerSocketList.Count; i++)
        {
            workerSocket = (Socket)m_workerSocketList[i];
            if (workerSocket != null)
            {
                if (workerSocket.Connected)
                {
                    workerSocket.Send(byData);
                }
            }
        }           
    }
服务器
不连续发送时,它工作正常。但若
服务器
发送数据的速度快于
客户端
处理数据的速度,则数据开始在缓冲区中累积。当
client
从缓冲区读取数据时,它会从缓冲区读取所有数据,从而破坏我的逻辑

我需要这样的东西:如果
服务器
将数据发送到
客户端
,它必须等待数据在
客户端
处理,然后才能发送任何新数据


这是怎么可能的???

“当客户端从缓冲区读取数据时,它会从缓冲区读取所有数据,从而破坏了我的逻辑。”-听起来您希望的是消息传递而不是流式传输。如果您希望在TCP上发送消息,则由您自己来实现它,或者转移到为您实现它的更高级别抽象。(常见的实现方法是固定大小的消息、标记字节或长度前缀消息——但黄金法则是永远不要期望一侧的
发送
调用与另一侧的
接收
调用1-1匹配)“当客户端从缓冲区读取时,它从缓冲区读取所有数据,从而破坏我的逻辑。”-听起来你期待的是信息而不是流媒体。如果您希望在TCP上发送消息,则由您自己来实现它,或者转移到为您实现它的更高级别抽象。(通常的实现方法是固定大小的消息、标记字节或长度前缀消息,但黄金法则是,不要期望一侧的
发送
调用与另一侧的
接收
调用1-1匹配)
 public void OnDataReceived(IAsyncResult asyn)
    {
        try
        {
            SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
            int iRx = theSockId.thisSocket.EndReceive(asyn);
            char[] chars = new char[iRx + 1];              
            string szData = new string(chars);
            //Console.WriteLine(szData);
            string[] arrData = szData.Split(',');
            if (arrData.Length == 3)
            {
               // Some code
            }
            else if (arrData.Length == 2)
            {
                // Some Code
            }
            else if (arrData.Length == 1)
            {
            }
            WaitForData();
        }
        catch (ObjectDisposedException)
        {
            System.Diagnostics.Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n");
        }
        catch (SocketException se)
        {

        }
    }