Столкнулся с проблемой динамического определения количества байт для TCP Read! Просмотрев материал который есть на форуме пришел к мнению, что в основном статически все задают данное значение. Также просмотрел примеры от NI:
Мне не понятно почему используется именно 4 для первого TCP Read и соединяется с Type Cast?
Делаю по данному примеру программу для себя, в котором клиент и сервер общаются, в зависимости от того что придет на сервер, сервер отправляет данные на клиент. Пока все примитивно.
Server:
и т.д.
Client:
TCP Read и гибкое определение кол-ва байт
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: TCP Read и гибкое определение кол-ва байт
Первое предписывает прочитать 4 байта из соединения: размер следующей порции данныхDi3el писал(а): Мне не понятно почему используется именно 4 для первого TCP Read и соединяется с Type Cast?
после чего, прочитанная порция данных (она прочитана как 4 символа) преобразуется к типу, определяемому типом константы четверки (т.е. к типу i32).
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
- VIP
- Сообщения: 1337
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: TCP Read и гибкое определение кол-ва байт
Если размер данных не превысит 65535 байтов, то можно и двумя байтами обойтись. Но четыре удобнее - ведь функция Flatten to String может дописать эти четыре байта длины автоматически, соответственно код упрощается.Di3el писал(а): Мне не понятно почему используется именно 4 для первого TCP Read и соединяется с Type Cast?
Вот так пишем в сокет (на верхний коммент внимания не обращайте):
А вот так читаем:
Походу мне не очень понятно, как ваш пример работает - вы, похоже, длину передать забыли.
- Di3el
- beginner
- Сообщения: 45
- Зарегистрирован: 18 дек 2012, 17:28
- Версия LabVIEW: 11
- Откуда: Российская Федерация
- Контактная информация:
Re: TCP Read и гибкое определение кол-ва байт
Ваш пример работает, но я не могу разобраться почему он не срабатывает на моем.AndreyDmitriev писал(а): Походу мне не очень понятно, как ваш пример работает - вы, похоже, длину передать забыли.
Пример работает так:
1) наладили соединение.
2) клиент передает данные на сервер.
3) сервер читает.
4) выбираем определенные данные для отправки.
5) отправляем на клиент.
6) клиент принимает.
- Di3el
- beginner
- Сообщения: 45
- Зарегистрирован: 18 дек 2012, 17:28
- Версия LabVIEW: 11
- Откуда: Российская Федерация
- Контактная информация:
Re: TCP Read и гибкое определение кол-ва байт
Понял свою ошибку! Перед подачей данных на TCP Write необходимо их передать на Flatten To String. Я так понимаю данная функция перед сообщением вставляет 4 байта которые несут значения количества байт в сообщении?
-
IvanLis
- guru
- Сообщения: 5464
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: TCP Read и гибкое определение кол-ва байт
читайте внимательнее:Di3el писал(а):Я так понимаю данная функция перед сообщением вставляет 4 байта которые несут значения количества байт в сообщении?
AndreyDmitriev писал(а):Если размер данных не превысит 65535 байтов, то можно и двумя байтами обойтись. Но четыре удобнее - ведь функция Flatten to String может дописать эти четыре байта длины автоматически, соответственно код упрощается.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
- Di3el
- beginner
- Сообщения: 45
- Зарегистрирован: 18 дек 2012, 17:28
- Версия LabVIEW: 11
- Откуда: Российская Федерация
- Контактная информация:
Re: TCP Read и гибкое определение кол-ва байт
Ну да, я так и понял. Просто хотелось уточнить. А как изменится программа когда "можно обойтись двумя байтами" если не секрет, что бы раз и на всегда понять для себя?
-
IvanLis
- guru
- Сообщения: 5464
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: TCP Read и гибкое определение кол-ва байт
"Мурзилка" думаю все наглядно и понятноDi3el писал(а):Ну да, я так и понял. Просто хотелось уточнить. А как изменится программа когда "можно обойтись двумя байтами" если не секрет, что бы раз и на всегда понять для себя?
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
- Di3el
- beginner
- Сообщения: 45
- Зарегистрирован: 18 дек 2012, 17:28
- Версия LabVIEW: 11
- Откуда: Российская Федерация
- Контактная информация:
Re: TCP Read и гибкое определение кол-ва байт
О да! =) И в правду тяжелее код становиться Спасибо за пояснение!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 38 Ответы
- 13300 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 5 Ответы
- 250 Просмотры
-
Последнее сообщение IvanLis