IP адрес из TCP Reference

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

IP адрес из TCP Reference

Сообщение Eugen Graf »

Ребята, у меня есть IP Reference, который выходит из TCP Open VI.
Как я могу вытащить из него IP адрес?

Точнее скажем Connection ID.
Спасибо.
AndreyDmitriev

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

Re: IP адрес из TCP Reference

Сообщение AndreyDmitriev »

Connection ID подаешь на вход TCP Get Raw Net Object.vi (этот инструмент находится в C:\Program Files\National Instruments\LabVIEW 20xx\vi.lib\Utility\tcp.llb). Оттуда вылазит идентификатор сокета. Этот идентификатор подаёшь на вход geetpeername() (эта функция находится в библиотеке ws2_32.dll). Оттуда вылазит структура на 16 байт. Байты 4-7 будут содержать искомый IP адрес.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: IP адрес из TCP Reference

Сообщение dadreamer »

Можно ещё getsockopt использовать с параметрами level = SOL_SOCKET (0xFFFF) и optname = SO_BSP_STATE (0x1009). Только почему-то структура CSADDR_INFO не 24 байта, как в MSDN описано, а 56. После вызова функции из первого и второго параметров (указатели lpSockaddr в LocalAddr и в RemoteAddr) вытаскивается с помощью MoveBlock'а вот такая информация:

Код: Выделить всё

// IPv4 AF_INET sockets:

struct sockaddr_in {
    short            sin_family;   // e.g. AF_INET, AF_INET6
    unsigned short   sin_port;     // e.g. htons(3490)
    struct in_addr   sin_addr;     // see struct in_addr, below
    char             sin_zero[8];  // zero this if you want to
};
Собственно, sin_addr - это и есть адрес, к которому подключаемся. Преобразуется из строки / в строку через String To IP / IP To String.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: IP адрес из TCP Reference

Сообщение Eugen Graf »

Благодарю :super:
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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