public void Send(object msg) { if (_socket == null || !_socket.Connected || _isConnecting || _isCloseing) { return; } var sendBytes = Packer.Encode(msg); _sendQueue.EnqueueFrom(sendBytes); if (_sendQueue.Count == 1) { var node = _sendQueue.Peek(); _socket.BeginSend(node.Bytes, node.ReadIdx, node.Length, 0, SendCallback, _socket); } }
static void CallSend(Socket sock, string msg) { var bytes = Encoding.UTF8.GetBytes(msg); Int16 bodyLen = (Int16)bytes.Length; var lenBytes = BitConverter.GetBytes(bodyLen); if (!BitConverter.IsLittleEndian)// 小端发送 { Array.Reverse(lenBytes); } var data = new byte[2 + bytes.Length]; Array.Copy(lenBytes, data, 2); Array.Copy(bytes, 0, data, 2, bytes.Length); var ba = _wQueue.EnqueueFrom(data); if (_wQueue.Count == 1) { sock.BeginSend(ba.bytes, 0, ba.Length, 0, SendCB, sock); } }