C# C/S UDP一对多异步通信,该怎么处理

C# C/S UDP一对多异步通信
服务器端:
public class StateObject
    {
        //服务器端
        public Socket udpServer = null;
        //接受数据缓冲区
        public byte[] buffer = new byte[10*1024];
        //远程终端
        public EndPoint remoteEP;

        public bool flag = false;
    }


  private void ServerForm_Load(object sender, EventArgs e)
        {
            StartServer startServer = new StartServer();
            thread = new Thread(new ThreadStart(startServer.ServerBind));
            thread.Start();
        }

 #region 服务器绑定终端节点
        public void ServerBind()
        {
            //主机IP
            IPEndPoint serverIp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8686);
            Socket udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            udpServer.Bind(serverIp);
            IPEndPoint clientIp = new IPEndPoint(IPAddress.Any, 0);
            state = new StateObject();
            state.udpServer = udpServer;
            state.remoteEP = (EndPoint)clientIp;
            AsynRecive();
        }
        #endregion

        #region 异步接受消息
        public void AsynRecive()
        {
            lock (state)
            {
                state.udpServer.BeginReceiveFrom(state.buffer, 0, state.buffer.Length, SocketFlags.None, ref state.remoteEP,
                    new AsyncCallback(ReciveCallback), null);
                receiveDone.WaitOne();
            }
        }
        #endregion

        #region 异步接受消息回调函数
        public void ReciveCallback(IAsyncResult asyncResult)
        {
            if (asyncResult.IsCompleted)
            {
                //获取发送端的终节点
                IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 0);
                EndPoint remoteEP = (EndPoint)ipep;
                state.udpServer.EndReceiveFrom(asyncResult, ref remoteEP);
                data = new byte[10*1024];
                state.buffer.CopyTo(data, 0);
                state.buffer = new byte[10*1024];         
                int i = 0;
                ///取出命令
                for (i = 0; i < leng; i++)
                {
                    if (Convert.ToInt32(data[i]) == 0)