Russian Qt Forum

Qt => Работа с сетью => Тема начата: JamS007 от Январь 22, 2010, 21:52



Название: Основы работы с TCP/IP
Отправлено: JamS007 от Январь 22, 2010, 21:52
Здравствуйте,

программирование сети изучаю несколько дней. До этого не был знаком ни с какими реализациями сетевого взаимодействия. Решил изучить Qt-способы, так как считаю эту библиотеку действительно хорошей. Но во всех книгах, которые я прочитал по Qt, способ изложения один и тот-же. Мало того, во всех примерах приводиться "Эхо сервер". Вот решил задать несколько вопросов людям более осведомленным в этой теме:

1. Бывают ли реализации клиент-серверных приложений, в которых клиент подключившись однажды постоянно работает и обмениваться информацией с сервером, и только по завершении работы отключается?

2. Можно ли как-то реализовать взаимосвязь между клиентом и сервером как между функциями в обычной программе, или слотами в Qt?

3. Можно ли передавать информацию в оба конца используя один и тот же соккет (то есть с сервера на клиент, и с клиента на сервер)?

    3.1 Как правильно передавать информацию по TCP, особенно интересует проверка все ли пакеты дошли, а то из всех прочитанных примеров я так ничего и не понял.

Просьба: не пинайте... Я тоже хочу знать основы работы с сетью. И еще... объясняйте, пожалуйста, максимально доходчиво.  :-\


Название: Re: Основы работы с TCP/IP
Отправлено: BRE от Январь 22, 2010, 22:46
1. Бывают ли реализации клиент-серверных приложений, в которых клиент подключившись однажды постоянно работает и обмениваться информацией с сервером, и только по завершении работы отключается?
Такие приложения возможны, только нужно помнить, что сервер должен хранить информацию о всех подключениях, а это ресурсы, которые заканчиваются.

2. Можно ли как-то реализовать взаимосвязь между клиентом и сервером как между функциями в обычной программе, или слотами в Qt?
Подобные протоколы существуют, например XML-RPC.

3. Можно ли передавать информацию в оба конца используя один и тот же соккет (то есть с сервера на клиент, и с клиента на сервер)?
Да.

    3.1 Как правильно передавать информацию по TCP, особенно интересует проверка все ли пакеты дошли, а то из всех прочитанных примеров я так ничего и не понял.
Общение должно осуществляться по определенных правилам (протоколам).
На определенные протоколы есть спецификации, но можно придумать и свой проток.
Что бы определить, что пришли все данные, можно сначала отослать их длину, потом данные, вторая сторона зная длину, будет ждать получения полного пакета. Можно в конце данных передавать какую-то сигнатуру, по которой принимающая сторона определит, что пакет закончился.
Много чего можно придумать.
Посмотри спецификации на протоколы HTTP, FTP, ... Подумай...  :)


Название: Re: Основы работы с TCP/IP
Отправлено: DS_tm от Январь 22, 2010, 22:58
Пока писал ответ BRE уже ответил! Повторяться не буду, вот на вики начальная инфа про протоколы (http://ru.wikipedia.org/wiki/Протоколы_передачи_данных).

На счет 2-ого пункта, имейте в виду, что  какой бы не был проток, вы не сможете вызывать функции (и посылать сигналы) "напрямую" другой программе, протоколы по природе своей состоят из запроса и ответа, то есть явлаються асинхронными.


Название: Re: Основы работы с TCP/IP
Отправлено: BlackTass от Январь 23, 2010, 00:02
На счет 2-ого пункта, имейте в виду, что  какой бы не был проток, вы не сможете вызывать функции (и посылать сигналы) "напрямую" другой программе, протоколы по природе своей состоят из запроса и ответа, то есть явлаються асинхронными.
Теоретически это возможно (к данной теме конечно не относится, ибо чтобы реализовать подобное надо дофига опыта). Пишется обертка над сетью, которая вызывает методы в другой программе и возвращает результат их исполнения (в дотнете например такое есть)


Название: Re: Основы работы с TCP/IP
Отправлено: SABROG от Январь 23, 2010, 01:34
Был такой проект, vedga называется. Не знаю жив сейчас или нет. Суть в том, что сервер пишется также как и обычное Qt приложение, а вместо классов QPushButton и т.д. используются классы GPushButton. Сигналы соединяются со слотами и вообще всё как обычно. Пользователь запускает специальный клиент, который делает запрос к серверу написанному тоже на Qt. И создает интерфейс на основе этого ответа. Соответственно когда пользователь жмет кнопку на таком интерфейсе, то сигнал уходит по сети на сервер. Т.е. вся логика там.


Название: Re: Основы работы с TCP/IP
Отправлено: niXman от Январь 23, 2010, 02:41
http://ru.wikipedia.org/wiki/Remote_Procedure_Call
?


Название: Re: Основы работы с TCP/IP
Отправлено: xokc от Январь 23, 2010, 23:33
qdbus позволяет организовать прозрачный обмен сигнал/слотами. Только вот под Windows он вроде через tcp/ip не работает. По крайней мере тут на форуме были посты, что с другими компами через dbus связаться не получилось.