Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 23

Переданное изображение от клиента серверу "теряет в байтах"

23.03.2014, 00:33. Показов 831. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет! Столкнулся с проблемой и пока не могу ее решить, надеюсь на ваши советы. К сути. Есть клиент и сервер основанные на ассинхронных сокетах и ключевых словах await и async. Проблема следующая я хочу передать картинку от сервера клиенту. Логика такая bitmap->byte[]->char[] и передаю char[] массив ну и на стороне клиента обратно декодирую. Вопрос следующий не могу понять почему при декодировании и итоге часть данных масива "теряется" т.е вручную глянул эл-ты передаваемого и принятого массива и значения в конце массива различны.
Собственно код:
Сервер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
CodingImage img = new CodingImage();
                buffer = img.CodingImages("C:\\image\\lol.bmp");
                bufferChar = Encoding.Unicode.GetChars(buffer);
                char lastindex = bufferChar[218726];
                count = bufferChar.Length;
                lenght = bufferChar.Length.ToString();
                LogMessage("Waiting for connections...");
                try
                {
                    var tcpClient = await listener.AcceptTcpClientAsync();
                    HandleConnectionAsync(tcpClient);
                }
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
private async void HandleConnectionAsync(TcpClient tcpClient)
        {
            string clientInfo = tcpClient.Client.RemoteEndPoint.ToString();
            LogMessage(string.Format("Got connection request from {0}", clientInfo));
            try
            {
                using (var networkStream = tcpClient.GetStream())
                using (var reader = new StreamReader(networkStream))
                using (var writer = new StreamWriter(networkStream))
                {
                    writer.AutoFlush = true;
                    while (true)
                    {
                        //var dataFromServer = await reader.ReadAsync(bufferChar, 0, count);
                        /*if (string.IsNullOrEmpty(dataFromServer.ToString()))
                        {
                            break;
                        }
                        LogMessage(dataFromServer.ToString());
                         */
                        await writer.WriteLineAsync(lenght);
                        await writer.WriteAsync(bufferChar, 0, count);
                    }
                }
            }
C#
1
2
3
4
5
6
7
8
public byte[] CodingImages(string path)
        {
            Bitmap picture = new Bitmap(path);
            TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
            byte[] MassOfPicture = (byte[])tc.ConvertTo(picture, typeof(byte[]));
            byte lastindex = MassOfPicture[437453];
            return MassOfPicture;
        }
Клиент

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
TcpClient client = new TcpClient();
            await client.ConnectAsync(IPAddress.Loopback, port);
            LogMessage("Connected to Server");
            using (var networkStream = client.GetStream())
            using (var writer = new StreamWriter(networkStream))
            using (var reader = new StreamReader(networkStream)) 
            {
                writer.AutoFlush = true;
                for (int i = 0; i < 1; i++)
                {
                    //await writer.WriteLineAsync(DateTime.Now.ToLongDateString());
                    var lenght = await reader.ReadLineAsync();
                    int lenghtInt = Convert.ToInt32(lenght.ToString());
                    recievedChar = new char[lenghtInt];
                    await reader.ReadAsync(recievedChar, 0, lenghtInt);
                    char lastindex = recievedChar[218726];
                    EncodingImage img = new EncodingImage();
                    img.EncodingImages(recievedChar);
                    if (!string.IsNullOrEmpty(lenght))
                    {
                        LogMessage(lenght);
                    }
                }
            }
C#
1
2
3
4
5
6
7
8
public void EncodingImages(char[] recievedChar)
        {
            byte[] recieved = Encoding.Unicode.GetBytes(recievedChar);
            byte lastindex = recieved[437453];
            TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
            Bitmap bitmap = (Bitmap)tc.ConvertFrom(recieved);
            bitmap.Save("C:\\image\\lol_recieved.bmp");
        }
Ну а сами различия заметны в переменных "lastindex" Собственно может объяснить кто нибудь в чем может быть проблема? Мне ещё не очень нравиться вся эта цепчка кодирования и декодирования. Но делал ее изза методов WriteAsync и ReadAsync они принимают char[]
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2014, 00:33
Ответы с готовыми решениями:

При подключении клиента к серверу, подключается еще один клиент (фантом) завязанный на этого же клиента
Проблема появляется раз через раз с первого подключения клиентов, но после третьего и далее - всегда. В общем запускаю сервер, подключаю...

Клиент теряет подключение к серверу
Добрый день! Проблема такая. В один непрекрасный день в клиенте теряется возможность подключаться к серверу.Connections при этом...

После поворота изображение теряет прозрачность
В TPortableNetworkGraphic из файла загружено изображение с прозрачным фоном. Нужно повернуть его на alpha градусов. Написал алгоритм,...

1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.03.2014, 01:16
Цитата Сообщение от 123456789igor2 Посмотреть сообщение
не ещё не очень нравиться вся эта цепчка кодирования и декодирования. Но делал ее изза методов WriteAsync и ReadAsync они принимают char[]
что мешает напрямую писать в networkStream?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2014, 01:16
Помогаю со студенческими работами здесь

Acces теряет изображение мыши. Параллельный процесс?
В форме запускаю модуль 'глубокой' проверки достоверности (соответствия) данных состоящий из многих запросов. Если эта проверка длится...

Изображение теряет цвета при выводе функциями WinAPI на DC
Всем привет! Пишу курсовую на borland c++ builder. В окне создаю фигуры и перемещаю их мышью (обычные многоугольники). Так вот, если...

Подключение клиента к серверу
Здравствуйте! У меня есть следующие строки: Console.Title = &quot;Сервер #1&quot;; Server.Bind(new IPEndPoint(IPAddress.Any,...

Переподключение клиента к серверу
Всем привет, пишу код на сокетах, нужно сделать, что-бы клиент сам искал сервер, при его отключении. Клиентская часть: import...

Подключение клиента к серверу
Доброго времени суток. У меня проблема в моём КП, написал чат, всё вроде хорошо, но! сервер не может ко мне подключиться. Что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru