示例#1
0
        protected void SendCompleted()
        {
            if (SendArgs.BytesTransferred > 0)
            {
                byte[] buffer = null;
                lock (SendLine)
                {
                    //获取队列数据
                    if (SendLine.Count <= 0)
                    {
                        //没有数据重置外部调用
                        SendAvailable = true;
                    }
                    else
                    {
                        buffer = SendLine.Dequeue();
                    }
                }

                //有效
                if (IsAvailable)
                {
                    if (buffer != null)
                    {
                        //继续发送
                        Send(buffer);
                    }
                }
            }
            else
            {
                Dispose("SendArgs 小于0");
            }
        }
示例#2
0
        /// <summary>
        /// 循环发送
        /// </summary>
        protected override void Send(byte[] data)
        {
            try
            {
                lock (SendLine)
                {
                    if (SendLine.Count > 0)
                    {
                        data = SendLine.Dequeue();
                    }
                    else
                    {
                        SendFlag = true;
                        Monitor.Wait(SendLine);
                    }
                }

                if (data != null)
                {
                    UdpClient.BeginSend(data, data.Length, Remote, (ar) =>
                    {
                        if (UdpClient.EndSend(ar) == data.Length)
                        {
                            ar.AsyncWaitHandle.Dispose();
                            Send(null);
                        }
                    }, null);
                }
                else
                {
                    Send(null);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Dispose("Send " + e.Message);
            }
        }