Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Vlad_IT
1443 / 352 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
1

Получение данных с сервера

16.11.2011, 14:04. Просмотров 2246. Ответов 4
Метки нет (Все метки)

Добрый день. Вопрос такой. Я принимаю данные с сервера вот таким кодом.
C#
1
2
3
4
5
6
            byte[] bytes = new bytes[10];
            TcpClient MyClient = new TcpClient();
            MyClient.Connect("host.com", 5151);   
            NetworkStream MyNetStream = MyClient.GetStream();
            
            MyNetStream.BeginRead( bytes, 0, 100, new AsyncCallback(Read),null );
Я должен получить такой пакет
Код
33 25 12 211 49 111
Но вместо этого я получаю
Код
33 25 12 211 49 111 0 0 0 0
Как избавится от нулей? Дело в том что за ранее не известно какого размера пакет должен придти и фокус с удалением последний нулей тоже не подходит. Подскажите как мне это сделать. Был вариант записывать все в List<byte>, но я не знаю как это сделать через BeginRead. За ранее очень благодарен.

Добавлено через 13 минут
Забыл добавить. Вот асинхронный метод Read
C#
1
2
3
4
public static void Read(IAsyncResult sync)
{  
       Console.WriteLine(BitConverter.ToString(bytes));
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 14:04
Ответы с готовыми решениями:

XNet Получение данных с WEB - сервера
Всем привет! Можете показать простой пример получения данных с web - сервера . Допустим, у нас есть...

TcpListener и TcpClient: написать события на получение данных от сервера
Доброго времени суток, господа программисты. Пишу чат с помощью TcpListener и TcpClient. Как мне...

Бесперерывное получение ответа от сервера(Socket)
Собственно как настроить бесперерывное получение? на данный момент я получаю так: int bytesRec...

Организация проверки времени на получение ответа от прокси-сервера
Здравствуйте, товарищи-программисты. Программа занимается проверкой качества большого количества...

Получение данных
Доброго времени суток! Есть программа которая постоянно принимает данные и их обрабатывает.Как с...

4
Niades
86 / 72 / 6
Регистрация: 11.09.2011
Сообщений: 118
16.11.2011, 16:23 2
Цитата Сообщение от Vlad_IT Посмотреть сообщение
<...>Я должен получить такой пакет<...>
Код
33 25 12 211 49 111
<...> Дело в том что за ранее не известно какого размера пакет должен придти <...>
Как раз знаете, пакет размером 6 байт.
1
Vlad_IT
1443 / 352 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
16.11.2011, 16:37  [ТС] 3
Niades, Это примерный пакет. Пакеты на самом деле бывают больших размеров, около 100-1000байт.
0
Niades
86 / 72 / 6
Регистрация: 11.09.2011
Сообщений: 118
16.11.2011, 16:58 4
Цитата Сообщение от Vlad_IT Посмотреть сообщение
Был вариант записывать все в List<byte>
Для этого используйте Array.ToList() и делайте например так:
C#
1
2
3
byte[] bytes = { 0, 0, 2, 2, 4 };
            List<byte> _bytes = bytes.ToList();
            _bytes.RemoveAll(m => m==0);
А вообще, у класса Socket есть свойство Available, которое возвращает количество данных, доступных для чтения. Выглядеть это будет так:
C#
1
2
            
byte[] bytes = new bytes[MyClient.Client.Available];
Но может возникнуть сложность - данные могут еще не придти, когда вы будете получать значение этого свойства.
Также можете попробовать проверить свойство Length вашего NetworkStream:
C#
1
byte[] bytes = new bytes[MyNetStream.Length];
1
Vlad_IT
1443 / 352 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
16.11.2011, 19:01  [ТС] 5
Niades, Спасибо. Но я лучше сделаю так.
C#
1
2
3
4
5
6
7
8
9
10
public static void Read(IAsyncResult sync)
        {
            int ka = MyNetStream.EndRead(sync);
            byte[] k = bytes;
            bytes = new byte[ka];
            for (int i = 0; i < ka; i++)
                bytes[i] = k[i];
            Console.Write(BitConverter.ToString(bytes));
          
        }
Но все равно спасибо)
1
16.11.2011, 19:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2011, 19:01

COM порт - получение данных
Собственно задача такая: для начало нужно получить любые данные с com порта с прибора. Есть код: ...

Получение данных с сайтов
Здравствуйте! Пишу информационное приложение которое обрабатывает информацию о курсах валют, погоде...

Получение данных с потока
Подскажите пожалуйста как получать и обрабатывать данные с потока. Есть API, в котором создается...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru