예제 #1
0
        /// <summary>
        /// 同步发送分包数据
        /// </summary>
        /// <param name="message"></param>
        public void SendData(Msg message)
        {
            ICollection <UdpPacket> udpPackets = UdpPacketSplitter.Split(message);

            foreach (UdpPacket udpPacket in udpPackets)
            {
                byte[] udpPacketDatagram = SerializationUnit.SerializeObject(udpPacket);
                this.client.Connect(udpPacket.remoteip);
                //使用同步发送
                client.Send(udpPacketDatagram, udpPacketDatagram.Length, udpPacket.remoteip);
                if (udpPacket.IsRequireReceiveCheck)
                {
                    PushSendItemToList(udpPacket);//将该消息压入列表
                }
            }
        }
예제 #2
0
        public static ICollection <UdpPacket> Split(Msg message)
        {
            byte[] datagram = null;
            try
            {
                datagram = SerializationUnit.SerializeObject(message);
            }
            catch (Exception e)
            {
                //AddTalkMessage("数据转型异常");
            }
            //产生一个序列号,用来标识包数据属于哪一组
            Random Rd             = new Random();
            long   SequenceNumber = Rd.Next(88888, 999999);
            ICollection <UdpPacket> udpPackets = UdpPacketSplitter.Split(SequenceNumber, datagram, 10240, message.destinationIP, message.port);

            return(udpPackets);
        }
예제 #3
0
        /// <summary>
        /// 异步分包发送数组的方法
        /// </summary>
        /// <param name="message"></param>
        public void AsyncSendData(Msg message)
        {
            ICollection <UdpPacket> udpPackets = UdpPacketSplitter.Split(message);

            this.client.Connect(udpPackets.FirstOrDefault().remoteip);

            foreach (UdpPacket udpPacket in udpPackets)
            {
                byte[] udpPacketDatagram = SerializationUnit.SerializeObject(udpPacket);

                //使用同步发送
                //client.Send(udpPacketDatagram, udpPacketDatagram.Length);

                //使用异步的方法发送数据
                this.client.BeginSend(udpPacketDatagram, udpPacketDatagram.Length, new AsyncCallback(SendCallback), null);
                //Thread.Sleep(10);
            }
        }