/// <summary> /// create a receiver with a valid {@link UDTSession} /// </summary> /// <param name="session"></param> /// <param name="endpoint"></param> public UDTReceiver(UDTSession session, UDPEndPoint endpoint) { this.roundTripTimeVar = roundTripTime / 2; this.endpoint = endpoint; this.session = session; //( System.DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks)/10000; //如果要得到Java中 System.currentTimeMillis() 一样的结果,就可以写成 上面那样,也可以这样写: // TimeSpan ts=new TimeSpan( System.DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks); //(long)ts.TotalMilliseconds; this.sessionUpSince = (long)ts.TotalMilliseconds; this.statistics = session.getStatistics(); if (!session.isReady()) { Log.Write(this.ToString(), "UDTSession is not ready."); } ackHistoryWindow = new AckHistoryWindow(16); packetHistoryWindow = new PacketHistoryWindow(16); receiverLossList = new ReceiverLossList(); packetPairWindow = new PacketPairWindow(16); largestReceivedSeqNumber = (int)session.getInitialSequenceNumber() - 1; bufferSize = session.getReceiveBufferSize(); handoffQueue = new Queue <UDTPacket>(4 * session.getFlowWindowSize()); storeStatistics = false; //Boolean.getBoolean("udt.receiver.storeStatistics"); initMetrics(); start(); }
public UDTSession(String description, Destination destination) { Random ro = new Random((int)DateTime.Now.Ticks & 0x0000FFFF); nextSocketID = ro.Next(0, 5000) + 20; statistics = new UDTStatistics(description); mySocketID = Interlocked.Increment(ref nextSocketID); this.destination = destination; //this.dgPacket=new DatagramPacket(new byte[0],0,destination.getAddress(),destination.getPort()); //this.dgPacket = new byte[0]; this.dgPacket = new IPEndPoint(destination.getAddress(), destination.getPort()); //UDTCongestionControl _CongestionControl = new UDTCongestionControl(); //String clazzP=_CongestionControl.ToString(); Object ccObject = null; //try //{ // Class<?>clazz=Class.forName(clazzP); // ccObject=clazz.getDeclaredConstructor(UDTSession.class).newInstance(this); //} //catch(Exception e) //{ // Log.Write(this.ToString(),"WARNING","Can't setup congestion control class <"+clazzP+">, using default.",e); // ccObject = new UDTCongestionControl(this); //} ccObject = new UDTCongestionControl(this); cc = (CongestionControl)ccObject; Log.Write(this.ToString(), "Using " + cc.ToString()); }
public UDTSender(UDTSession session, UDPEndPoint endpoint) { if (!session.isReady()) { Log.Write(this.ToString(), "UDTSession is not ready."); } this.endpoint = endpoint; this.session = session; statistics = session.getStatistics(); senderLossList = new SenderLossList(); sendBuffer = new Dictionary <long, DataPacket>(session.getFlowWindowSize()); sendQueue = new Queue <DataPacket>(1000); lastAckSequenceNumber = (int)session.getInitialSequenceNumber(); currentSequenceNumber = (int)session.getInitialSequenceNumber() - 1; waitForAckLatch.Set(new CountDownLatch(1)); waitForSeqAckLatch.Set(new CountDownLatch(1)); storeStatistics = false; //Boolean.getBoolean("udt.sender.storeStatistics"); initMetrics(); doStart(); }
public UDTCongestionControl(UDTSession session) { this.session = session; this.statistics = session.getStatistics(); lastDecreaseSeqNo = session.getInitialSequenceNumber() - 1; }