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(); } }
/** * * @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); } }); }
/** * 添加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++; }
/** * 返回连接的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); }
public RequestRunner(judpSocket socket) { this.socket = socket; format.NumberDecimalDigits = 3; memMapped = false;//true; }
/** * * * 读取文件发送 * * @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; } } }