/// <summary> /// Отправка сырых двоичных данных на удаленный хост асинхронно. /// </summary> /// <param name="data">ДвоичныеДанные которые нужно отправить.</param> public void ОтправитьДвоичныеДанныеАсинхронно(ДвоичныеДанные _data, bool sendlen = true) { try { var buf = _data.Buffer; var len = buf.Length; if (len == 0) { status = "Успех"; return; } var stream = _client.GetStream(); status = "Занят"; if (sendlen) { stream.Write(BitConverter.GetBytes((long)len), 0, 8); // сколько данных } stream.BeginWrite(buf, 0, len, new AsyncCallback(this.OnWriteComplete), null); //stream.Flush(); } catch { status = "Ошибка"; } }
/// <summary> /// Отправка сырых двоичных данных на удаленный хост. /// </summary> /// <param name="data">ДвоичныеДанные которые нужно отправить.</param> public void ОтправитьДвоичныеДанные(ДвоичныеДанные data) { if (data.Buffer.Length == 0) { return; } var stream = _client.GetStream(); stream.Write(data.Buffer, 0, data.Buffer.Length); stream.Flush(); }
// ToDo: ПолучитьБуферДвоичныхДанныхИзСтроки public static string ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные data, string encoding = null) { // Получаем кодировку // Из синтаксис помощника если кодировка не задана используем UTF8 System.Text.Encoding enc = System.Text.Encoding.UTF8; if (encoding != null) { enc = КодировкаТекста.GetEncoding(encoding); } return(enc.GetString(data.Buffer)); }
/// <summary> /// Разделяет двоичные данные на части заданного размера. Размер задается в байтах. /// </summary> /// <param name="data">Объект типа ДвоичныеДанные.</param> /// <param name="size">Размер одной части данных.</param> /// <returns>Массив объектов типа ДвоичныеДанные.</returns> public static Массив азделитьДвоичныеДанные(ДвоичныеДанные data, int size) { // Сделано на int т.к. BinaryContext.Size имеет тип int; Массив array = new Массив(); int readedBytes = 0; while (readedBytes < data.Buffer.Length) { int bytesToRead = size; if (bytesToRead > data.Buffer.Length - readedBytes) { bytesToRead = data.Buffer.Length - readedBytes; } byte[] buffer = new byte[bytesToRead]; Buffer.BlockCopy(data.Buffer, readedBytes, buffer, 0, bytesToRead); readedBytes += bytesToRead; array.Добавить(new ДвоичныеДанные(buffer)); } return(array); }
// ToDo: ПолучитьДвоичныеДанныеИзHexДвоичныхДанных // ToDo: ПолучитьБуферДвоичныхДанныхИзHexБуфераДвоичныхДанных // ToDo: ПолучитьHexДвоичныеДанныеИзДвоичныхДанных // ToDo: ПолучитьHexБуферДвоичныхДанныхИзБуфераДвоичныхДанных /// <summary> /// Преобразует двоичные данные в буфер двоичных данных. /// </summary> /// <param name="data">Двоичные данные.</param> /// <returns>Тип: БуферДвоичныхДанных.</returns> public static БуферДвоичныхДанных ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные data) { return(new БуферДвоичныхДанных(data.Buffer)); }
/// <summary> /// Преобразует двоичные данные в строку формата Base 16 (Hex). /// </summary> /// <param name="data">Двоичные данные.</param> /// <returns>Тип: Строка.</returns> public static string ПолучитьHexСтрокуИзДвоичныхДанных(ДвоичныеДанные data) { return(BitConverter.ToString(data.Buffer).Replace("-", "")); }
// ToDo: ПолучитьБуферДвоичныхДанныхИзBase64Строки public static string ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанные data) { return(System.Convert.ToBase64String(data.Buffer)); }
public ValueBinaryData(ДвоичныеДанные value) { this.Value = value.Данные; }
public object ДвоичныеДанныеВСтруктуру(object Данные, object знСтруктура = null) { БуферДвоичныхДанных бдДанные; long рдДанные; if (Данные is ДвоичныеДанные) { ДвоичныеДанные дд = Данные as ДвоичныеДанные; рдДанные = дд.азмер(); if (рдДанные == 0) { return(null); } бдДанные = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(дд); } else if (Данные is БуферДвоичныхДанных) { бдДанные = Данные as БуферДвоичныхДанных; рдДанные = бдДанные.азмер; } else { return(null); } var Позиция = 0; if (знСтруктура is null) { знСтруктура = Структура.Новый(); } while (Позиция < рдДанные - 1) { var рдКлюч = бдДанные.ПрочитатьЦелое16(Позиция); var рдЗначение = бдДанные.ПрочитатьЦелое32(Позиция + 2); if (рдКлюч + рдЗначение > рдДанные) // Это не структура { return(null); } var Ключ = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(бдДанные.Прочитать(Позиция + 6, рдКлюч))); var бЗначение = бдДанные.Прочитать(Позиция + 6 + рдКлюч, рдЗначение); Позиция = Позиция + 6 + рдКлюч + рдЗначение; object Значение; var Л = Лев(Ключ, 1); if (Л == "*") { Ключ = Сред(Ключ, 2); Значение = ДвоичныеДанныеВСтруктуру(бЗначение, Структура.Новый()); } else if (Л == "&") { Ключ = Сред(Ключ, 2); Значение = ДвоичныеДанныеВСтруктуру(бЗначение, Соответствие.Новый()); } else if (Л == "$") { Ключ = Сред(Ключ, 2); Значение = ДвоичныеДанныеВСтруктуру(бЗначение, Массив.Новый()); } else if (Л == "#") { Ключ = Сред(Ключ, 2); Значение = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(бЗначение); } else if (Л == "^") { Ключ = Сред(Ключ, 2); Значение = null; } else { Значение = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(бЗначение)); if (Л == "!") { Ключ = Сред(Ключ, 2); Значение = Число(Значение); } } if (Ключ == "") { (знСтруктура as Массив).Добавить(Значение); } else { (знСтруктура as Структура).Вставить(Ключ, Значение); } } return(знСтруктура); }
public ДвоичныеДанные СтруктуруВДвоичныеДанные(object знСтруктура) { var езультат = Массив.Новый(); if (знСтруктура != Неопределено) { foreach (object Элемент in знСтруктура as IEnumerable <object> ) { string Ключ = ""; object Значение; ДвоичныеДанные дЗначение = null; if (знСтруктура is Массив) { Ключ = ""; Значение = Элемент; } else { Ключ = (string)(Элемент as КлючИЗначение).Ключ; Значение = (Элемент as КлючИЗначение).Значение; } if (Значение is Структура) { Ключ = "*" + Ключ; дЗначение = СтруктуруВДвоичныеДанные((Структура)Значение); } else if (Значение is Соответствие) { Ключ = "&" + Ключ; дЗначение = СтруктуруВДвоичныеДанные((Соответствие)Значение); } else if (Значение is Массив) { Ключ = "$" + Ключ; дЗначение = СтруктуруВДвоичныеДанные((Массив)Значение); } else if (Значение is ДвоичныеДанные) { Ключ = "#" + Ключ; дЗначение = Значение as ДвоичныеДанные; } else if (Значение is null) { Ключ = "^" + Ключ; дЗначение = ПолучитьДвоичныеДанныеИзСтроки(""); } else { if (Значение is int || Значение is decimal) { Ключ = "!" + Ключ; } дЗначение = ПолучитьДвоичныеДанныеИзСтроки(Значение.ToString()); } var дКлюч = ПолучитьДвоичныеДанныеИзСтроки(Ключ); var рдКлюч = дКлюч.азмер(); var рдЗначение = дЗначение.азмер(); var бРезультат = БуферДвоичныхДанных.Новый(6); бРезультат.ЗаписатьЦелое16(0, рдКлюч); бРезультат.ЗаписатьЦелое32(2, рдЗначение); езультат.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(бРезультат)); езультат.Добавить(дКлюч); езультат.Добавить(дЗначение); } } return(СоединитьДвоичныеДанные(езультат)); }
public static string Base64Строка(ДвоичныеДанные data) { return(Convert.ToBase64String(data.Buffer)); }
public string ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанные data) { return(GlobalBinaryData.ПолучитьBase64СтрокуИзДвоичныхДанных(data)); }
public string ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные arg) { return(GlobalBinaryData.ПолучитьСтрокуИзДвоичныхДанных(arg)); }
public БуферДвоичныхДанных ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные arg) { return(GlobalBinaryData.ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(arg)); }