/// <summary> /// 端口独立线程,crtsnt数组序号 /// </summary> void ClientThread(object clienttable) { var table = (ClientItem)clienttable; try { table.WorkEnable = true; table.Remote = IPAddress.Parse(table.Client.Client.RemoteEndPoint.ToString().Split(':')[0]); OnAccept?.Invoke(table.Remote); using (var ns = table.Client.GetStream()) { var buffer = new byte[BufferSize]; var read = 0; while (table.WorkEnable && table.Client.Connected) { using (var ms = new MemoryStream()) { while (ns.DataAvailable)//!sr.EndOfStream) { read = ns.Read(buffer, 0, BufferSize); ms.Write(buffer, 0, read); } OnDataReceive?.Invoke(table.Remote, ms.ToArray()); } Thread.Sleep(Interval); } } } finally { table.Client.Close(); ClientTable.Remove(table); OnDisConnect?.Invoke(table.Remote); } }
/// <summary> /// 断开连接 /// </summary> public override void DisConnect() { try { Connected = false; if (NetSocket == null) { return; } OnDisConnect?.Invoke(this); } catch { } try { SendParser.Clear(); RecvParser.Clear(); NetSocket.Close(); NetSocket.Dispose(); NetSocket = null; this.inArgs.Dispose(); this.outArgs.Dispose(); } catch { } }
/// <summary> /// 断开连接 /// </summary> public override void DisConnect() { try { Connected = false; ConnectSender.SendFIN(this.NetSocket, this.RemoteEndPoint, this.Id); OnDisConnect?.Invoke(this); } catch { } }
public ClientManager(int capacity, int emptyPoolCnt) { _capacity = capacity; _clientList = new List <ClientData>(); _clientPool = new ClientDataPool(capacity); _messageTransfer = new CruMessageTransfer(); _sendQueue = new CruMessageQueue(capacity); _receiveQueue = new CruMessageQueue(capacity); _sendDataBuffer = new byte[1024]; _clientPool.SetEmptyData(emptyPoolCnt); // Pool 미리 생성 // Event 추가 receiveCompleteEvent += PushReceiveData; disConnectEvent += DisConnectClient; }
void OnSocketException(SocketError error) { TryDisConnectSocket(); OnDisConnect?.Invoke(error); }
void OnSocketException(SocketError error) { udpClient?.Close(); OnDisConnect?.Invoke(error); }