Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

C++: кросплатформенный TCP клиент-сервер

#cpp #tcp_ip #клиент_сервер


Гуглил на тему tcp клиент-сервера, но выдает либо через WinAPI, либо через socket-ы
Linux.
Неужели за столько лет не появилось нормального кроссплатформенного решения в виде
приложения к стандартной библиотеке?
Прошу прояснить ситуацию
    


Ответы

Ответ 1



Добрый день! Нет, сети в стандарте С++, по-моему, до сих пор не появились. Поэтому ищем дополнительные, сторонние библиотеки. Используйте boost::asio или что-то подобное

Ответ 2



Если сервер не высоконагруженный, то ничего искать не нужно. Все, что касается сети и под Win и под Linux будет будет с бОльшего вполне кроссплатформенно. Ну да, разные header файлы будут. Ну и под Win придется библиотеку подключить дополнительно. Но это меньшее из зол (имеется ввиду чем тянуть еще буст и т.п.). Если же нужен сильный сервер, тогда, на мой взгляд, лучше вообще его писать под ту ось, на которой он и будет работать, а не придумывать себе сказку, что "сейчас я сделаю кроссплатформенный сервер, нужный всем и на всех осях и на все случаи жизни, и этот сервер будет держать 100500 соединений". Что касается клиента, то здесь тем более нет проблем. Но это все относительно вопроса ( а там только про сеть упоминалось ).

Ответ 3



Посмотри в сторону Qt. Они сейчас выросли в разы. Я бы делал на нем. Так же можно использовать Node.js , он прекрасно работает и под вин и под линукс. Php тоже самое, есть интепретатор под виндоус. Код менять не придется.

Ответ 4



Я щупал Qt и asio. Asio (в standalone-версии) - самый лёгкий вариант в плане размера бинарников и скорости исполнения, Qt почти не отстаёт по скорости, но библиотеки намного тяжелее (Qt5Core - 5+Мб, Qt5Network - 1.5Мб, тогда как бинарники клиента и сервера через asio были намного меньше 100 кб), но лучше документирован. Для asio почти вся документация идёт в варианте boost::asio, чтобы разобраться со standalone-версией пришлось денёк покопаться. Если решение в основном планируется на STL, я бы использовал asio. Если же в проекте Qt уже используется, QTcpServer и QTcpSocket сильно проект не утяжелят.

Комментариев нет:

Отправить комментарий