как подключиться к серверу liblo TCP OSC?

Я использую liblo для связи OSC (низкоуровневый API) через UDP в течение некоторого времени, и сейчас я пытаюсь переключиться на TCP. Однако у меня возникли проблемы с пониманием того, как использовать библиотеку для TCP. echoserver демонстрирует, как настроить сервер. В основном я делаю так:

_tcpThread = lo_server_thread_new_with_proto( "7000", LO_TCP, errorHandler );
_tcpServer = lo_server_thread_get_server( _tcpThread );
lo_server_thread_start( _tcpThread );

_address = lo_address_new_with_proto( LO_TCP, "127.0.0.1", "7000" );
lo_send_message_from( _address, _tcpServer, "/test", message );

Теперь, как мне создать клиент, который подключается к сокету TCP и получает отправленные пакеты OSC? Документация и примеры кода оставляют меня ломать голову. Создать второй сервер на стороне клиента? Как мне сказать, куда подключаться?


РЕДАКТИРОВАТЬ: хорошо, теперь я понял, что lo_send_message_from на самом деле хочет целевой адрес в качестве первого аргумента. Из этого я делаю вывод, что мне придется перебирать всех подключенных клиентов и отправлять их в соответствующие сокеты. Остается вопрос, кому подключать клиента к серверу? Возникает второй вопрос, как мне узнать, какие клиенты подключены, чтобы я мог отправлять свои посылки?


person iko79    schedule 04.08.2020    source источник


Ответы (1)


Итак, я понял это тем временем, и я снова тот парень, который отвечает на свой вопрос, но есть вероятность, что это кому-то пригодится:

Похоже, причиной путаницы было то, что в OSC термин сервер относится к узлу, получающему данные, отправляемые, а клиент — к узлу, предоставляющему данные, а не наоборот. Как только вы это узнаете, все будет довольно просто, если взглянуть на образец эхосервера, который я упомянул в вопросе: вы открываете сокет сервера с помощью lo_server_thread_new_with_proto и ждете данных, например. зарегистрировав обратный звонок через lo_server_add_method. Клиент создает адрес с lo_address_new_with_proto и использует его для lo_send, и в этом случае устанавливается TCP-соединение, если оно еще не установлено.

person iko79    schedule 07.08.2020