Russian Qt Forum
Ноябрь 23, 2024, 14:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Основы работы с TCP/IP  (Прочитано 6975 раз)
JamS007
Гость
« : Январь 22, 2010, 21:52 »

Здравствуйте,

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

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

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

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

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

Просьба: не пинайте... Я тоже хочу знать основы работы с сетью. И еще... объясняйте, пожалуйста, максимально доходчиво.  В замешательстве
Записан
BRE
Гость
« Ответ #1 : Январь 22, 2010, 22:46 »

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

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

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

    3.1 Как правильно передавать информацию по TCP, особенно интересует проверка все ли пакеты дошли, а то из всех прочитанных примеров я так ничего и не понял.
Общение должно осуществляться по определенных правилам (протоколам).
На определенные протоколы есть спецификации, но можно придумать и свой проток.
Что бы определить, что пришли все данные, можно сначала отослать их длину, потом данные, вторая сторона зная длину, будет ждать получения полного пакета. Можно в конце данных передавать какую-то сигнатуру, по которой принимающая сторона определит, что пакет закончился.
Много чего можно придумать.
Посмотри спецификации на протоколы HTTP, FTP, ... Подумай...  Улыбающийся
Записан
DS_tm
Гость
« Ответ #2 : Январь 22, 2010, 22:58 »

Пока писал ответ BRE уже ответил! Повторяться не буду, вот на вики начальная инфа про протоколы.

На счет 2-ого пункта, имейте в виду, что  какой бы не был проток, вы не сможете вызывать функции (и посылать сигналы) "напрямую" другой программе, протоколы по природе своей состоят из запроса и ответа, то есть явлаються асинхронными.
Записан
BlackTass
Гость
« Ответ #3 : Январь 23, 2010, 00:02 »

На счет 2-ого пункта, имейте в виду, что  какой бы не был проток, вы не сможете вызывать функции (и посылать сигналы) "напрямую" другой программе, протоколы по природе своей состоят из запроса и ответа, то есть явлаються асинхронными.
Теоретически это возможно (к данной теме конечно не относится, ибо чтобы реализовать подобное надо дофига опыта). Пишется обертка над сетью, которая вызывает методы в другой программе и возвращает результат их исполнения (в дотнете например такое есть)
Записан
SABROG
Гость
« Ответ #4 : Январь 23, 2010, 01:34 »

Был такой проект, vedga называется. Не знаю жив сейчас или нет. Суть в том, что сервер пишется также как и обычное Qt приложение, а вместо классов QPushButton и т.д. используются классы GPushButton. Сигналы соединяются со слотами и вообще всё как обычно. Пользователь запускает специальный клиент, который делает запрос к серверу написанному тоже на Qt. И создает интерфейс на основе этого ответа. Соответственно когда пользователь жмет кнопку на таком интерфейсе, то сигнал уходит по сети на сервер. Т.е. вся логика там.
Записан
niXman
Гость
« Ответ #5 : Январь 23, 2010, 02:41 »

http://ru.wikipedia.org/wiki/Remote_Procedure_Call
?
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #6 : Январь 23, 2010, 23:33 »

qdbus позволяет организовать прозрачный обмен сигнал/слотами. Только вот под Windows он вроде через tcp/ip не работает. По крайней мере тут на форуме были посты, что с другими компами через dbus связаться не получилось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.357 секунд. Запросов: 23.