Beispiel #1
0
 /// <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();
 }
Beispiel #2
0
        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());
        }
Beispiel #3
0
 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;
 }