powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / недопустимая длина строки или массива знаков base-64.
26 сообщений из 26, показаны все 2 страниц
недопустимая длина строки или массива знаков base-64.
    #39250370
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите что это за ошибка и как ее исправить

Buffer = Convert.FromBase64String(base64string);
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250378
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не валиндая входящяя строка base64. Нужно разбираться "почему?".
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250384
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic Hunter,
а как можно выяснить пробовала через отладчик но так ничего и не поняла
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250387
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic Hunter,
как это можно выяснить?
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250388
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emiliya_Emili,

Откуда эта строка поступает? Вы ее формируете?
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250392
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic Hunter,

срока это данные переданные по сети
Код: c#
1.
2.
                    byte[] buffer = new byte[65538];
                    string strData = Encoding.Default.GetString(buffer);



после этого работаю с данной строкой
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250393
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic Hunter,
вот код отправки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
FileStream Stream = File.OpenRead(strData);
                            byte[] Buffer = new byte[65535];
                            int BytesRead = -1;
                            while (BytesRead != 0)
                            {
                                BytesRead = Stream.Read(Buffer, 0, 65535);
                                SendData(fail, Convert.ToBase64String(Buffer));
                            }
                            Stream.Close();       
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250401
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emiliya_Emili,

Ваша base64 строка либо содержит не печатные символы, либо не четный размер, обрезается где-то. Нужно ее сравнить с передаваемой на том конце и что приходит на ваш. Ну и исходную проверить на валидность. Есть онлайн base64 конверторы.
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250404
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emiliya_Emiliсрока это данные переданные по сети
Переданные как? По TCP-соединению? Если так, то данные приходят не одним большим куском как отправлены, а порциями, которые сначала надо склеить в целое, а потом обрабатывать.
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250408
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TПо TCP-соединению? Если так, то данные приходят не одним большим куском как отправлены, а порциями, которые сначала надо склеить в целое, а потом обрабатывать.
по TCP
и отправляется порциями а как их склеивать?
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250410
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emiliya_EmiliDima TПо TCP-соединению? Если так, то данные приходят не одним большим куском как отправлены, а порциями, которые сначала надо склеить в целое, а потом обрабатывать.
по TCP
и отправляется порциями а как их склеивать?
обычно передается сначала размер, затем данные. При приеме читается размер и затем ждется пока все данные не поступят, только потом обработка данных.
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250411
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic Hunter,
вот такой объем принимается
byte[] buffer = new byte[65538];
и потом 3 символа(тип сообщения: информация, файл) обрезаются а остальное конвертируется в массив байтов
byte[] Buffer = Convert.FromBase64String(strData);
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250413
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
размер и имя файла я передаю
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250414
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Emiliya_Emili,
сначала принимается информация потом файл, но про проверку размера не знала
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 else if (messege == info)
                        {
                            int b = strData.IndexOf("\0");
                            b = b - 3;
                            strData = strData.Substring(3, b);
                            string[] tx = strData.Split('@');
                            nam = tx[0];
                            size = Convert.ToInt64(tx[1]+5);
                            textBox1.Text = tx[0];
                            textBox2.Text = tx[1];
                        }
                        else if (messege == fail)
                        {
                            int b = strData.IndexOf("\0");
                            b = b - 3;
                            int df = strData.Length - 3;
                            if (b > 0) strData = strData.Substring(3, b);
                                else strData = strData.Substring(3, df);
                            if (Writing == null)
                            {
                                Writing = File.OpenWrite(Path.Combine(path1, nam));
                            }
                            byte[] Buffer = Convert.FromBase64String(strData);
                            Writing.Write(Buffer, 0, Buffer.Length);
                            if (strData.Length < 65535) Writing.Close();
                        }         
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250415
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При передаче по сети не надо Base64, достаточно преобразовать в byte[] и слать этот массив.
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250419
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
а можно массив байтов преобразовать в строку, а при приеме обратно?
у меня везде общий код отправки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
       public void SendData(string kod, string infoToSend)
        {
            byte[] dataToSend = Encoding.Default.GetBytes(kod + infoToSend);
            if (localClient != null && localClient.Connected)
            {
                localClient.GetStream().Write(dataToSend, 0, dataToSend.Length);
            }
            else if (remoteClient != null && remoteClient.Connected)
            {
                remoteClient.GetStream().Write(dataToSend, 0, dataToSend.Length);
            }
        } 
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250420
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TCP это бесконечный поток. Отправитель пишет в него какие-то байты, получатель их получает, получает в той же последовательности как писал отправитель, но не теми блоками, которыми писал отправитель. Поэтому получатель должен сам определить где начало блока данных, где конец, самое простое первые 4 байта задают размер, дальше блок этого размера, так получатель легко распознает в какой момент прекратить читать и начать обрабатывать принятое.
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250421
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emiliya_EmiliDima T,
а можно массив байтов преобразовать в строку, а при приеме обратно?

Код: c#
1.
Encoding.Default.GetString()
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250422
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: c#
1.
Encoding.Default.GetString()


только если символ будет двухбайтовый (русская буква) и порвется посредине, то будут нездоровые буквы в принятом, или просто вопросики.
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250423
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Код: c#
1.
Encoding.Default.GetString()



это вот так?
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250424
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
while (BytesRead != 0)
{
BytesRead = Stream.Read(Buffer, 0, 65535);
SendData(fail, Encoding.Default.GetString(Buffer));//////////////////////////////
}
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250426
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TDima T
Код: c#
1.
Encoding.Default.GetString()


только если символ будет двухбайтовый (русская буква) и порвется посредине, то будут нездоровые буквы в принятом, или просто вопросики.

русских букв вроде не должно быть ведь это картинка или документ или видео
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250429
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emiliya_Emiliрусских букв вроде не должно быть ведь это картинка или документ или видео
причем тут string?
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250432
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

мне сказали что в интернете файлы передаются в виде 16-ричного кода
поэтому и по сети надо так же передавать
считывается часть файла, преобразуется и отправляется
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250436
Emiliya_Emili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробовала проверять размер но в файле ничего нет
Код: c#
1.
2.
3.
4.
5.
6.
7.
    if (Writing == null)
                            {
                                Writing = File.OpenWrite(Path.Combine(path1, nam));
                            }
                            if (DFG < size) Buffer = Encoding.Default.GetBytes(strData);
                                else Writing.Write(Buffer, 0, Buffer.Length);
                            if (strData.Length < 65535) Writing.Close();
...
Рейтинг: 0 / 0
недопустимая длина строки или массива знаков base-64.
    #39250661
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emiliya_EmiliDima T,

мне сказали что в интернете файлы передаются в виде 16-ричного кода
поэтому и по сети надо так же передавать
считывается часть файла, преобразуется и отправляется
Неправильно сказали. По TCP передаются байты как есть, поэтому сначала приводишь к byte[] то что передать собралась, затем передаешь. Чтобы конвертировать длину массива используй BitConverter.GetBytes
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / недопустимая длина строки или массива знаков base-64.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]