powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как получить пакеты по очереди, а не одновременно (tcp ip)
16 сообщений из 16, страница 1 из 1
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274438
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть метод получающий команды и данные с сервера.
Команды всегда имеют признак конца команды \r\n.
А данные идут без такого признака.
Например приходят 2 пакета "123" и "456".
Данный метод может прочитать их правильно("123" и "456"), а может так "123456"
Как изменить метод чтобы данные всегда читались правильно.
Заранее благодарен за ответ.

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
private void DoRead(IAsyncResult ar)
        {
            int BytesRead;
            string strMessage;
            string[] splitArray;
            try
            {              
                // Finish asynchronous read into readBuffer and return number of bytes read.
                // Закончить асинхронное чтение в readBuffer и вернуть количество прочитанных байт
                BytesRead = client.GetStream().EndRead(ar);
                if (BytesRead < 1)
                {
                    // if no bytes were read server has close.
                    // Если не прочитано не одного байта значит сервер отключен.
                    MarkAsDisconnected();
                    return;
                }
                // Convert the byte array the message was saved into
                // Конвертировать байтовый массив в строку в формате UTF8
                strMessage = Encoding.UTF8.GetString(readBuffer, 0, BytesRead);

                // Может быть получено и сохранено в readBuffer
                // сразу несколько команд из сервера(c нулевым интервалом отправления).
                // Разделим их по признаку конца команды \r\n
                splitArray = strMessage.Split(new Char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < splitArray.Length; i++)
                {
                    ProcessCommands(splitArray[i]);
                }
                // Start a new asynchronous read into readBuffer.
                // Начать асинхронное чтение в readBuffer
                client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(DoRead), null);
            }
            catch (Exception e)
            {
                MarkAsDisconnected();
            }
        }
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274451
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81Данный метод может прочитать их правильно("123" и "456"), а может так "123456"
оба - правильно.

webber81Как изменить метод чтобы данные всегда читались правильно.
никак

webber81А данные идут без такого признака.
значит нужно предусмотреть разделитель
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274456
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилwebber81А данные идут без такого признака.
значит нужно предусмотреть разделительИли передавать в начале размер блока данных.
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274474
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прогер который пишет серверную часть говорил что то про ReadLine
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274500
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81Прогер который пишет серверную часть говорил что то про ReadLinewebber81А данные идут без такого признака.В "данных" же разделителя в виде конца строки нет? А так да, можно было бы попробовать Socket + NetworkStream + StreamReader + ReadLine. И если читать в блокирующем режиме, то программа будет проще.
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274514
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81Прогер который пишет серверную часть говорил что то про ReadLine
а описание протокола он сделал?
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274515
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ если читать в блокирующем режиме, то программа будет проще.Хотя нет, использовать StreamReader.ReadLineAsync не на много сложнее.
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274519
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилwebber81Прогер который пишет серверную часть говорил что то про ReadLine
а описание протокола он сделал?С описанием протокола писать клиента скучно и неинтересно. :-)
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274540
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

зачем это вообще делать? всё уже есть в коробочке, надо просто туда заглянуть и взять нужное :) но нет, мы будем писать велосипед
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274556
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КС описанием протокола писать клиента скучно и неинтересно. :-)
топикстартеру всё таки усвоить нужно, что на прикладном уровне в TCP никаких пакетов нет
и его "команда" тоже может прийти по частям
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274557
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesзачем это вообще делать? всё уже есть в коробочке, надо просто туда заглянуть и взять нужное :) но нет, мы будем писать велосипед
в учебных целях - почему нет?
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274565
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилАлексей КС описанием протокола писать клиента скучно и неинтересно. :-)
топикстартеру всё таки усвоить нужно, что на прикладном уровне в TCP никаких пакетов нет
и его "команда" тоже может прийти по частям"Прогеру, который пишет серверную часть" и является автором протокола это усвоить тоже не помешает. :-)
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274641
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть если данные идут без признака конца параметра, то восстановить их первоначальный вид невозможно.
Даже если они были отправлены в разных пакетах.
Я правильно понял?
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274664
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81Я правильно понял?
да.

отправка "123456" и "123","456" - одной или двумя операциями записи - для tcp - одно и то же.
пакеты TCP прикладному программисту не видны, к вызовам send и recv отношения не имеют
(никаого первоначального вида нет)


PS не микроконтроллер ли является сервером?
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274685
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилPS не микроконтроллер ли является сервером?
Нет. Сервер обычный комп на винде. Серверная прога написана на шарпе.
...
Рейтинг: 0 / 0
Как получить пакеты по очереди, а не одновременно (tcp ip)
    #39274697
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81Серверная прога написана на шарпе.
самый обыкновенный WCF применить.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как получить пакеты по очереди, а не одновременно (tcp ip)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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