コード例 #1
0
ファイル: judpSocketManager.cs プロジェクト: jinyuttt/netudt
        private void StartGC()
        {
            Thread gc = new Thread(() =>
            {
                while (true)
                {
                    judpSocket socket = null;
                    foreach (var item in dicMap)
                    {
                        if (!item.Key.TryGetTarget(out socket))
                        {
                            UDTSession serversession = endPoint.RemoveSession(item.Value);
                            if (serversession != null)
                            {
                                serversession.Socket.Close();
                                serversession.Socket.GetReceiver().Stop();
                                serversession.Socket.GetSender().Stop();
                                FlashLogger.Info("移除socket:" + item.Value);
                            }
                        }
                    }
                }
            });

            gc.IsBackground = true;
            gc.Name         = "GCSocket";

            if (!gc.IsAlive)
            {
                gc.Start();
            }
        }
コード例 #2
0
ファイル: judpSendFile.cs プロジェクト: jinyuttt/netudt
 /**
  *
  * @Title: startSend
  * @Description: 开始发送
  * @param     参数
  * @return void    返回类型
  */
 public void StartSend()
 {
     Task.Factory.StartNew(() => {
         try {
             UDTReceiver.connectionExpiryDisabled = true;
             judpServer server = null;
             if (host == null)
             {
                 server = new judpServer(serverPort);
             }
             else
             {
                 server = new judpServer(host, serverPort);
             }
             server.Start();
             while (true)
             {
                 judpSocket socket = server.Accept();
                 Thread.Sleep(1000);
                 //threadPool.execute(new RequestRunner(socket));
                 Task.Factory.StartNew(() =>
                 {
                     new RequestRunner(socket).run();
                 });
             }
         } catch (Exception ex) {
             Console.WriteLine(ex);
         }
     });
 }
コード例 #3
0
ファイル: judpSocketManager.cs プロジェクト: jinyuttt/netudt
        /**
         * 添加judpSocket
         * @param socket
         */
        public void AddSocket(judpSocket socket)
        {
            WeakReference <judpSocket> tmp = new WeakReference <judpSocket>(socket);

            dicMap.TryAdd(tmp, socket.SocketID);
            if (num % 10 == 0)
            {
                GC.Collect(0);
            }
            num++;
        }
コード例 #4
0
ファイル: judpServer.cs プロジェクト: jinyuttt/netudt
        /**
         * 返回连接的socket
         */
        public judpSocket Accept()
        {
            UDTSocket socket = SocketControls.GetInstance().GetSocket();

            if (socket == null)
            {
                //再次获取下一个
                socket = SocketControls.GetInstance().GetSocket();
            }
            //包装
            judpSocket jsocket = new judpSocket(socket);

            judpSocketManager.GetInstance(socket.GetEndpoint()).AddSocket(jsocket);
            return(jsocket);
        }
コード例 #5
0
ファイル: judpSendFile.cs プロジェクト: jinyuttt/netudt
 public RequestRunner(judpSocket socket)
 {
     this.socket = socket;
     format.NumberDecimalDigits = 3;
     memMapped = false;//true;
 }
コード例 #6
0
ファイル: ApplicationCode.cs プロジェクト: jinyuttt/netudt
        /**
         *
         *
         * 读取文件发送
         *
         * @param   文件,socket,发送包大小
         *
         * @return
         *
         *
         */

        internal static void CopySocketFile(string file, judpSocket target, int packagetLen)
        {
            //byte[]buf=new byte[8*65536];
            FileStream fis = null;

            try {
                fis = new FileStream(file, FileMode.Open);
            } catch (FileNotFoundException e) {
                return;
            }
            byte[] buf  = new byte[bufsize];
            int    c    = 0;
            long   read = 0;
            long   size = fis.Length;

            byte[] data      = null;
            int    sendCount = 0;
            long   sendSum   = 0;

            if (packagetLen <= 0)
            {
                packagetLen = 65535;
            }
            int  sendLen  = packagetLen - 24;
            long waitTime = 0;

            if (speed > 0)
            {
                waitTime = (long)(speed * 1000);
            }
            Console.WriteLine("sendFile_" + file + ",socketID:" + target.SocketID);
            while (true)
            {
                try {
                    c = fis.Read(buf, 0, buf.Length);
                } catch (IOException e) {
                    Console.WriteLine(e.Message);
                }
                if (c < 0)
                {
                    break;
                }
                read += c;
                if (sendCount > 128)
                {
                    try {
                        Thread.Sleep(1000);
                        sendCount = 0;

                        Console.WriteLine("文件发送" + file + "," + sendSum);
                    } catch (Exception e) {
                        Console.WriteLine(e.Message);
                    }
                }
                if (c < sendLen)
                {
                    data = new byte[c];
                    Array.Copy(buf, 0, data, 0, c);
                    target.SendData(data);
                    sendCount++;
                    sendSum++;
                }
                else
                {
                    int offset = 0;
                    int len    = c;
                    while (len > 0)
                    {
                        int clen = len > sendLen ? sendLen : len;
                        data = new byte[clen];
                        Array.Copy(buf, offset, data, 0, clen);
                        target.SendData(data);
                        len     = len - clen;
                        offset += clen;
                        sendCount++;
                        sendSum++;
                        if (waitTime > 0 && sendSum % waitTime == 0)
                        {
                            Thread.Sleep(1000);
                        }
                    }
                }
                if (read >= size && size > -1)
                {
                    break;
                }
            }
        }