/// <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);//将该消息压入列表 } } }
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); }
/// <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); } }