как подключиться к серверу liblo TCP OS C? - PullRequest
0 голосов
/ 04 августа 2020

Я использую liblo для связи OS C ( lowlevel 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 и получает отправленные пакеты OS C? Документация и образец кода заставляют меня чесать голову. Создать второй сервер на стороне клиента? Как мне сказать, к чему подключиться?

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

1 Ответ

0 голосов
/ 07 августа 2020

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

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

...