TCP Read и гибкое определение кол-ва байт

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Аватара пользователя
Di3el
beginner
beginner
Сообщения: 45
Зарегистрирован: 18 дек 2012, 17:28
Версия LabVIEW: 11
Откуда: Российская Федерация
Контактная информация:

TCP Read и гибкое определение кол-ва байт

Сообщение Di3el »

Столкнулся с проблемой динамического определения количества байт для TCP Read! Просмотрев материал который есть на форуме пришел к мнению, что в основном статически все задают данное значение. Также просмотрел примеры от NI:
Изображение
Мне не понятно почему используется именно 4 для первого TCP Read и соединяется с Type Cast?
Делаю по данному примеру программу для себя, в котором клиент и сервер общаются, в зависимости от того что придет на сервер, сервер отправляет данные на клиент. Пока все примитивно.
Server:
Изображение
Изображение
и т.д.

Client:
Изображение
Вложения
Client.vi
(11.7 КБ) 121 скачивание
Server.vi
(10.88 КБ) 114 скачиваний
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: TCP Read и гибкое определение кол-ва байт

Сообщение mzu2006 »

Di3el писал(а): Мне не понятно почему используется именно 4 для первого TCP Read и соединяется с Type Cast?
Первое предписывает прочитать 4 байта из соединения: размер следующей порции данных
после чего, прочитанная порция данных (она прочитана как 4 символа) преобразуется к типу, определяемому типом константы четверки (т.е. к типу i32).
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1337
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 42 раза
Контактная информация:

Re: TCP Read и гибкое определение кол-ва байт

Сообщение AndreyDmitriev »

Di3el писал(а): Мне не понятно почему используется именно 4 для первого TCP Read и соединяется с Type Cast?
Если размер данных не превысит 65535 байтов, то можно и двумя байтами обойтись. Но четыре удобнее - ведь функция Flatten to String может дописать эти четыре байта длины автоматически, соответственно код упрощается.

Вот так пишем в сокет (на верхний коммент внимания не обращайте):
Изображение

А вот так читаем:
Изображение

Походу мне не очень понятно, как ваш пример работает - вы, похоже, длину передать забыли.
Аватара пользователя
Di3el
beginner
beginner
Сообщения: 45
Зарегистрирован: 18 дек 2012, 17:28
Версия LabVIEW: 11
Откуда: Российская Федерация
Контактная информация:

Re: TCP Read и гибкое определение кол-ва байт

Сообщение Di3el »

AndreyDmitriev писал(а): Походу мне не очень понятно, как ваш пример работает - вы, похоже, длину передать забыли.
Ваш пример работает, но я не могу разобраться почему он не срабатывает на моем.
Пример работает так:
1) наладили соединение.
2) клиент передает данные на сервер.
3) сервер читает.
4) выбираем определенные данные для отправки.
5) отправляем на клиент.
6) клиент принимает.
Аватара пользователя
Di3el
beginner
beginner
Сообщения: 45
Зарегистрирован: 18 дек 2012, 17:28
Версия LabVIEW: 11
Откуда: Российская Федерация
Контактная информация:

Re: TCP Read и гибкое определение кол-ва байт

Сообщение Di3el »

Понял свою ошибку! Перед подачей данных на TCP Write необходимо их передать на Flatten To String. Я так понимаю данная функция перед сообщением вставляет 4 байта которые несут значения количества байт в сообщении? :think:
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: TCP Read и гибкое определение кол-ва байт

Сообщение IvanLis »

Di3el писал(а):Я так понимаю данная функция перед сообщением вставляет 4 байта которые несут значения количества байт в сообщении?
читайте внимательнее:
AndreyDmitriev писал(а):Если размер данных не превысит 65535 байтов, то можно и двумя байтами обойтись. Но четыре удобнее - ведь функция Flatten to String может дописать эти четыре байта длины автоматически, соответственно код упрощается.
Аватара пользователя
Di3el
beginner
beginner
Сообщения: 45
Зарегистрирован: 18 дек 2012, 17:28
Версия LabVIEW: 11
Откуда: Российская Федерация
Контактная информация:

Re: TCP Read и гибкое определение кол-ва байт

Сообщение Di3el »

Ну да, я так и понял. Просто хотелось уточнить. А как изменится программа когда "можно обойтись двумя байтами" если не секрет, что бы раз и на всегда понять для себя?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: TCP Read и гибкое определение кол-ва байт

Сообщение IvanLis »

Di3el писал(а):Ну да, я так и понял. Просто хотелось уточнить. А как изменится программа когда "можно обойтись двумя байтами" если не секрет, что бы раз и на всегда понять для себя?
"Мурзилка"
2.png
2.png (10.21 КБ) 4819 просмотров
1.png
думаю все наглядно и понятно :wink:
Аватара пользователя
Di3el
beginner
beginner
Сообщения: 45
Зарегистрирован: 18 дек 2012, 17:28
Версия LabVIEW: 11
Откуда: Российская Федерация
Контактная информация:

Re: TCP Read и гибкое определение кол-ва байт

Сообщение Di3el »

О да! =) И в правду тяжелее код становиться :suicide: Спасибо за пояснение! :wink:
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»