TCP-клиент в C, который отправляет и слушает: концепция - PullRequest
0 голосов
/ 18 февраля 2012

Я пытаюсь сделать TCP-клиент на C. Но прежде чем я начну, я хотел бы получить от вас несколько советов.

Клиент для управления освещением и другими устройствами.

С этим клиентом мне потребуется отправлять команды, но я также могу получать события, когда кто-то выключает свет.

Просто отправка команд с сокетами не проблема. Но в то же время я должен читать для входящих пакетов.

Как это лучше всего решить? Нужно ли использовать потоки или я могу решить это с помощью команды libevent?

Как большинство людей реализуют что-то подобное?

Эта библиотека должна быть максимально переносимой. (Linux, Unix, Windows, ...)

(я не ищу код, а просто лучший подход)

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

BSD сокеты являются двунаправленными, и вы можете проверить, есть ли в вашем сокете входящие данные или нет, выбрав (2)

ИМХО использование libevent слишком много для вашей цели.Это приятно, но вам предстоит долгий путь, чтобы осознать его силу.На самом деле libevent - это оболочка для select (2) или его улучшенного наследника epoll (2) и т. Д.

0 голосов
/ 18 февраля 2012

Я думаю, у вас должно быть два соединения, одно для отправки команды, другое для получения ответа от сервера, когда кто-то выключает свет, чаще всего два conn находятся в спящем режиме. если вы создаете только одно соединение, вы должны запрашивать состояние light каждые xx мс, большую часть времени это тратит пропускную способность. если ваше приложение не серьезное, сервер может использовать UDP для уведомления клиента, когда кто-то выключает свет, и для этого решения требуется только одно действующее TCP-соединение.

...