Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > помогите с сокетами (C++, SSL)


Автор: pyqt 23.1.2009, 03:46
Привет всем!
Пишу консольную прогу клиент-сервер (Linux, g++)

Клиент подключается к серверу и запрашивает данные. На каждый запрос получает ответ.
В итоге необходимо примерно такую функцию:
string getResult(string req)
{
//проверить, если все еще подключен. Если нет - переподключиться, и так бесконечно
//отправить request
//return ответ
}
И все это надо завязать на OpenSSL.

Сервер должен для каждого соединения создавать поток, который подключается к postgreSQL и вытягивает данные (для каждого потока - свое postgres соединение).

Что я уже сделал:
Используя библиотеку Sockets (http://www.alhem.net/Sockets/) я наладил клиент-сервер с SSL. Могу делать Send(), получать ответ. Не знаю как там с отдельными потоками на сервере, еще не проверил.

Но! Там все event-based, т.е. при OnRead сделать то-то, и т.п.
А мне нужно как в PHP fsockopen, подключился, отправил запрос, потом fread (пока не получу данные - жду), и т.п.

Подходит ли эта библиотека?
Я искал, чтобы проще SSL реализовать, как я понял в стандартной библиотеке это сложно.
Как это лучше реализовать?

Заранее спасибо за помощь!

Автор: MAKCim 23.1.2009, 09:25
Цитата(pyqt @  23.1.2009,  03:46 Найти цитируемый пост)
Я искал, чтобы проще SSL реализовать, как я понял в стандартной библиотеке это сложно.

не сложно

Автор: vinick 23.1.2009, 16:13
Цитата(pyqt @  23.1.2009,  03:46 Найти цитируемый пост)
Но! Там все event-based, т.е. при OnRead сделать то-то, и т.п.
А мне нужно как в PHP fsockopen, подключился, отправил запрос, потом fread (пока не получу данные - жду), и т.п.

А чем тебя не устраивает event-based ?
там все так же, только бесконечный цикл за тебя реализует библиотека.

Автор: MAKCim 23.1.2009, 16:41
Цитата(vinick @  23.1.2009,  16:13 Найти цитируемый пост)
там все так же, только бесконечный цикл за тебя реализует библиотека. 

имхо, нет

кроме того, блокирование на read/write и бесконечный цикл это не одно и то же  smile 

Автор: vinick 23.1.2009, 18:11
Цитата(MAKCim @  23.1.2009,  16:41 Найти цитируемый пост)
имхо, нет

Я похоже не смог внятно выразить свою мысль  smile 
Суть в том что между
 
Цитата

подключился, отправил запрос, потом fread (пока не получу данные - жду)

и
Цитата

при OnRead сделать то-то, и т.п.

особой разницы нет. Можно рассматривать вызов onRead как эквивалент возврата из блокированного fread и все дела smile


pyqt,  если очень хочется плюсовой обвязки над сокетами можешь посмотреть на boost.asio, там так же есть поддержка SSL и можно работать с синхронными сокетами, т.е. connect(), потом в read ждешь пока не пришли данные и т.п. Хотя на мой взгляд event-based гораздо удобнее.

Автор: MAKCim 23.1.2009, 19:17
Цитата(vinick @  23.1.2009,  18:11 Найти цитируемый пост)
особой разницы нет. Можно рассматривать вызов onRead как эквивалент возврата из блокированного fread и все дела

а ждать мы onRead как будем?

Автор: vinick 23.1.2009, 21:09
Цитата(MAKCim @  23.1.2009,  19:17 Найти цитируемый пост)
а ждать мы onRead как будем? 

А как мы ждем возврата из блокируемого read ? Тут так же.  Скорее всего мы будем спать в каком-нить системном вызове.

Автор: MAKCim 23.1.2009, 22:21
Цитата(vinick @  23.1.2009,  21:09 Найти цитируемый пост)
Скорее всего мы будем спать в каком-нить системном вызове. 

ну и в чем отличие от блокирующей модели тогда?  smile 

Автор: vinick 23.1.2009, 22:40
Цитата(MAKCim @  23.1.2009,  22:21 Найти цитируемый пост)
ну и в чем отличие от блокирующей модели тогда?  

Принципиальной разницы. как я и говорил -  нет. Синхронная и асинхронная модели эквивалентны.

Автор: MAKCim 23.1.2009, 23:33
Цитата(vinick @  23.1.2009,  22:40 Найти цитируемый пост)
Синхронная и асинхронная модели эквивалентны. 

смелое утверждение...но не верное

Автор: vinick 23.1.2009, 23:57
Цитата(MAKCim @  23.1.2009,  23:33 Найти цитируемый пост)
смелое утверждение...но не верное

Обоснование будет? или краткость твоя сестра ? smile

Автор: MAKCim 24.1.2009, 11:28
Цитата(vinick @  23.1.2009,  23:57 Найти цитируемый пост)
Обоснование будет? или краткость твоя сестра ?

синхронная концепция - запрос с блокировкой в ожидании результата 
I/O: блокирующий, мультиплексированный

асинхронная концепция - запрос без блокировки в ожидании результата 
I/O: неблокирующий, event-based (например через сигнал), асинхронный
при этом в первых двух типах I/O асинхронной концепции нет автоматического вызова примитивов read/write ядром

Автор: powerfox 26.1.2009, 13:47
pyqt, посмотрите на boost Asio.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)