Консультация № 182644
27.03.2011, 19:47
50.05 руб.
0 16 1
Здравствуйте!
Подскажите, какие существуют способы соединения двух компьютеров (для создания клиент-сервеных приложений)?
Один из способов - использование Winsock. Есть ли ещё что-нибудь?

Обсуждение

давно
Посетитель
7438
7205
27.03.2011, 20:24
общий
Адресаты:
Есть еще такие инструменты, как MailSlot, Pipe.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Руководитель
2
547
27.03.2011, 21:50
общий
Адресаты:
Спасибо, Игорь!
При встрече плотнее пообщаемся на эту тему.
Неизвестный
28.03.2011, 02:59
общий
Адресаты:
Еще есть веб-сервисы. Фактически, страница на веб-сервере, которая принимает параметры в определенном формате и возвращает результат в определенном формате. В принципе, обычная функция. Есть библиотеки, которые этот процесс как функцию и представляют. В .Net оно встроено. Под нативный C++ тоже наверняка есть. Нагрузка на сеть повыше, чем если самому через сокеты делать, но зато гораздо удобнее программировать.
Неизвестный
28.03.2011, 08:26
общий
Адресаты:
RPC (Remote Procedure Call) ещё можно назвать.
давно
Мастер-Эксперт
425
4118
29.03.2011, 12:19
общий
Адресаты:
HTTPS предпочтительнее. Не надо дополнительно шифровать данные и канал защищён. Сама работа клиента с сервером, при этом, ничем не отличается от работы в браузере с сайтом. Правда, доверенный сертификат стоит денег, от 3000 рэ на год. Но, можно пользоваться и недоверенным сертификатом или, на время отладки, пользоваться пробным бесплатным сертификатом на 90 дней.
Если заинтересуетесь - компоненты для С++ http://curlpp.org/
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Руководитель
2
547
29.03.2011, 12:26
общий
Адресаты:
Спасибо за информацию, Генри!
А на Winsock разрабатывают серьёзные приложения или это так, для небольших проектов?
давно
Мастер-Эксперт
425
4118
29.03.2011, 14:40
общий
Адресаты:
Цитата: Алексей Гладенюк
А на Winsock разрабатывают серьёзные приложения или это так, для небольших проектов?

Разрабатывают. Но нужен довольно большой объём кода. По мне, лучше взять какую-нибудь готовый ОО компонент и работать через него. Объём кода сокращается на порядок.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
425
4118
30.03.2011, 14:09
общий
Адресаты:
Чуть не забыл. У MS есть ещё специальный набор функций для работы с интернет, которые находятся в файле wininet.h. Чем примечательны эти функции, там при соединении (InternetOpen() ) можно задавать адрес прокси-сервера.
Если нужно, я разберусь с этими функциями (т.к. с++ никогда не увлекался, то познания в нём у меня скудные ) и напишу небольшой примерчик. Нужно или Вы сами?
Описание функций.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Руководитель
2
547
30.03.2011, 15:17
общий
Адресаты:
Спасибо, Сэр Генри, за дополнительную инфу.
Я тут уже начал организовывать соединение по Winsock. Вот только не знаю, позволяет ли это дело подключаться через прокси? Вроде должен быть способ такой...
давно
Мастер-Эксперт
425
4118
30.03.2011, 15:46
общий
Адресаты:
Цитата: Алексей Гладенюк
Вот только не знаю, позволяет ли это дело подключаться через прокси? Вроде должен быть способ такой...

Прямого способа, используя простое соединение сокетов, как это объявлено в winsock\winsock2, нет. Тем не менее, можно покопаться в исходниках ICQ-клиентов и посмотреть, как у них организовано подключение через SOCKET4\5-прокси.
Например, здесь: Miranda-im.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Руководитель
2
547
30.03.2011, 15:47
общий
Адресаты:
Спасибо! Ценная информация, покопаюсь...
давно
Мастер-Эксперт
425
4118
30.03.2011, 17:13
общий
Адресаты:
Да чего уж там... И ничего такого...
Опять у меня склероз. Они ведь и через http-прокси подключаются и ничего, не пищат...
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
31.03.2011, 23:19
общий
Адресаты:

Что с этим вопросом делаем? Наверное, sir Henry мог бы ответить, но если не хотите, то я могу его закрыть :)
давно
Мастер-Эксперт
425
4118
01.04.2011, 03:52
общий
Составьте синтетический ответ по сообщениям в мини-форуме, если Олега удовлетворяет то, что тут написано.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Руководитель
2
547
01.04.2011, 16:21
общий
Алёна, всё вполне нормально, можно составить ответ из сообщений в мини-форуме.
Неизвестный
01.04.2011, 17:18
общий
это ответ
Здравствуйте, Калашников О.А.!

Основные способы (на основании ответов из мини-форума):
1. Mailslot (почтовый канал) - это файл, который находится в памяти, и Вы можете используете стандартные файловые функции Win32, чтобы иметь доступ к нему. Данные в mailslot могут быть в любой форме, но общий размер не может быть больше 64K. В отличие от дисковых файлов, файлы MailSlot временные. Когда все указатели на MailSlot закрываются, MailSlot и все данные, которые он содержит, удаляются. Ссылки по теме: что такое, MSDN (англ.), пример использования (внизу).
2. Pipe (канал) - средство межпроцессного взаимодействия, это область разделяемой памяти, один процесс пишет в неё, другой (или другие) читает. Чаще используется для организации взаимодействия процессов на локальном компьютере, но можно работать и по сети. Ссылки по теме: MSDN (англ.), пример использования (вверху).
3. Веб-сервис - грубо говоря, некоторое API, к которому можно обратиться по сети и которое описано посредством XML. На С++ реализовывать с нуля, честно говоря, мне кажется неоправданно муторным, проще уже тогда работать с .Net, где этот механизм весьма удобен. Но действительно существуют готовые решения, например, вот, однако это не бесплатно. Ссылки по теме: что такое.
4. Remote Procedure Call (удалённый вызов процедур) - технология, позволяющая компьютерным программам вызывать функции или процедуры в другом адресном пространстве (возможно, на удалённых компьютерах). Реализация клиент-серверного приложения по сравнению с теми же сокетами, по моему мнению, более трудоёмкая и менее очевидная. Ссылки по теме: что такое, описание механизма, пример (англ.).
5. HTTPS - расширение протокола HTTP, поддерживающее шифрование. Ссылки по теме: что такое, opensource-ный компонент для с++.
6. Функции WinInet - специальный набор функций для работы с Интернетом, предоставляющие в том числе возможность работы с прокси-сервером. Ссылки по теме: MSDN (англ), примеры.

Ну и напоследок, несколько opensource-ных библиотек, инкапсулирующих работу с сокетами:
dlib C++ library
Fox Toolkit

Удачи!
Форма ответа