![]() |
|
![]() ![]() ![]() |
|
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Добрый день.
Есть идея создать программу обмена сообщениями и файлами наподобие ICQ между двумя удаленными компьютерами по сети. Не очень хорошо разбираюсь в программировании, создал несколько программок, достаточно функциональных, но далеко не спец и под интернет не программировал вообще. Подскажите какими средствами это все делается, какие темы нужно изучить, какими компонентами нужно пользоваться. Спасибо. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 3 Всего: 97 |
Пример реализации с исходниками.
|
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Спасибо посмотрю. Но это пример чата в локальной сети? А в сети интернет? Мне бы элементарный пример для понимания принципа работы. Что нибудь типа поля Мемо, поля Edit и кнопки на форме клиентского приложения. Функциональность которого бы заключалась по нажатию кнопки в отправке строчки из поля Edit в поле Мемо своего приложения, ну и собственно в поле Мемо приложения удаленного пользователя. Связь через интернет. |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 25 Всего: 50 |
HTTP?
Добавлено через 4 минуты и 32 секунды
Indy |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
||||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 25 Всего: 50 |
C:\Program files\Borland\CBuilder6\Examples\Indy
|
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Что-то не получается наладить связь по сети интернет.
Создаю сервер на компьютере со статическим ай-пи, задав порт (как я понял это может быть любай цифра из определенного диапазона, я пробовал 4964, 5500, 6701). Пробую подключиться клиентом с другого компьютера, задав в свойство Host ай-пи сервера и в свойство Port - порт сервера. В событии клиента при подключении к серверу записываю вывод сообщения что присоединился. В событии сервера при подключении клиента записываю вывод сообщения, что присоединился клиент. Так вот нажав на копку "Подключиться к серверу" в клиенте нет сообщения об успешности подключения, соответственно на сервере тоже, то есть связь не установлена.
Что я делаю не так? |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Мда, собственно забыл активизировать клиента.
Теперь выскакивает ошибка "Asynchronous socket error 10060". Это сообщение отредактировал(а) Glorius - 15.3.2009, 17:49 |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 25 Всего: 50 |
Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Это я уже понял, а вот как это побороть пока не придумал. |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
В дополнение.
Изучая тему нашел информацию что связь еще зависит от типа доступа в интернет. Проверяю работоспособность на двух компьютерах подключенных по ADSL, у одного ай-пи адрес динамический, у второго (сервера) - статический. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
А Firewall'а там по пути нет случайно?
|
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
||||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
Glorius,
Сокет должен работать в асинхронном режиме, а получается так что ты пытаешься его заставить работать в синхронном режиме что присуще консольным приложениям сожержащим основной поток. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
||||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
А сервер к нету подключен через ADSL модем или роутер? Если через Роутер - в каком режиме он работает мост или роутер?
|
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
||||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Так вроде он и в режиме роутера работать может. Глянтьте на всякий случай, а то может тут зря воды столько развели, а ларчик бах и откроется.
|
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
||||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Если вы намерены писать достаточно серьезное сетевое приложение, то просто обязаны узнать как работают роутеры, что такое NAT и т.п. Зайдите в настройки роутера и посмотрите: 1. В каком режиме он находится (мост или роутер) 2. Включен ли у него аппаратный файрволл 3. Попробуйте в любом случае установить прямой рефорвардинг нужных вам портов. Должна же быть к нему инструкция? Конкретно эту модель я ни разу не настраивал - думаю информации в нете по ней уйма. Просто на сколько я помню он поддерживает беспроводную сетку тогда и роутить он просто обязан уметь. |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Anikmar, вы можете кратко и в достаточном объеме пояснить какие именно настройки ДОЛЖНЫ быть установлены на модеме сервера и клиента, в частности как определить режим (мост или роутер) и как его установить, включен ли файервол и как установить прямой рефорвардинг нужных мне портов?
Или мне нужно глубоко изучать тему? Приложение предполагается не сложное, на уровне обмена информацией между 2 компьютерами. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Если бы у меня был такой модем - я бы сразу вам все рассказал и не стал бы тянуть резину. К сожалению у меня другая модель, они отличаются существенно. Могу только посоветовать: Посмотрите тут, тут, тут А главное, используйте ЭТО |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Anikmar, да, как настроить - это можно нагуглить, но вам спасибо. Я же имел ввиду ЧТО ИМЕННО нужно настроить. То есть, нужен мост или роутер, нужно устанавливать прямой рефорвардинг портов или нет.
|
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Вне зависимости сложное сетевое приложение вы будете писать или не очень - вы собираетесь связать два компьютера через интернет. А значит, вы как минимум должны знать как адресуются компьютеры в данной сети.
Вкратце расскажу про NAT. В виду того, что общее количество IP адресов ограничено и быстро заканчивается, а IP v6 еще не известно когда получит широкое распространение (слишком много аппаратных роутеров необходимо поменять) наиболее широкое распространение получил NAT - способ ретрансляции сетвых адресов при помощи роутеров. Суть работы роутера достаточно проста: как только один из компов пытается подключится к другому (указывает его IP и порт) реально этот запрос сначала идет к роутеру (шлюзу). Сам роутер имеет свой IP и виден всему интернету. Он перенаправляет ваш запрос на указанный адрес. В случае с одним компом - все в порядке. А если 10 компов в локалке пытаются загрузить странички с одного сервака? Ведь сервак должен ответить, а для него - это всего лишь 1 адрес IP, который имеет роутер. И сервак в интернете никак не сможет понять к какому конкретно компу за роутером он должен обратиться. Это и есть NAT - роутер динамически меняет IP заголовок и подставляет фиктивные адреса портов, а затем при поступлении на эти порты ответов транслирует назад. Теперь о вашей ситуации. Если у вас сервер спрятан за роутер, то при поступлении пакета от клиента из Беларуссии роутер понятия не имеет куда этот пакет ему деть. Потому, как для порта, указанного в заголовке у него нет в таблице соответствия на какую из локальных машин этот пакет отправить. Даже если локальных машин в сети всего одна. Вот он и выкидывает пакет. Для этого и существует порт форвардинг - когда роутеру приказывают, что при поступлении пакетов на такой-то порт немедленно транслируй на такую-то машину в сети и не занимаяся ерундой. Это вкратце и по возможности доходчиво в меру моих знаний. Я не гуру, поэтому сказал, что сам понимаю. Добавлено через 3 минуты и 6 секунд Поставьте в режим моста и отключите файрволл. Дополнительно (по идее уже не нужно, но сделайте): Включите режим порт форвардинг на все порты, все пакеты напрямую на компьютер сервера. Он должен позволять задавать порты по диапазону - для всех протоколов все диапазоны перенапрвьте на сервер. |
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Anikmar, спасибо, попробую, завтра отпишу о результатх.
|
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Anikmar, все настройки серверного модема такие как показаны по вашей первой ссылке, то есть настроен модем как мост (bridge).
А вот как выглядит статусное окно модема клиентской машины. Тоже мост. При отключенных фаерволах пинг не проходит как и не проходил раньше. Это сообщение отредактировал(а) Glorius - 17.3.2009, 15:47 Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
А можете сказать, какой IP у вашего сервера? (Если нет военной тайны, конечно).
|
|||
|
||||
Glorius |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
впринципе нет, только я дам адрес клиентской машины, она у меня под рукой, а в моей программе нету особой разницы кто именно будет сервером, IP-адрес 86.57.178.37. Если вы не сильно заняты, может поможете мне справиться с этой проблемой в ICQ? Мой номер 352336167 |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Попробуем. Я свяжусь с вами примерно через 30 минут - когда до дому доеду
|
|||
|
||||
KTatsu |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 23.8.2008 Где: Москва Репутация: 1 Всего: 1 |
Тема относительно не старая, так, что задам свой вопрос сюда, вместо того, чтобы писать новый пост, тем более вопрос по теме.
Тоже возникла проблеммка с передачей данных по сети. Я хочу сделать на своей машине сервер, а у друга будет клиент, проблема, с которой я столкнулся - маршрутеризаторы. По LAN отлично работает, а вот из внешней сети не знаю как присоединиться. Использовал компоненты TClientSocket и TServerSocket. Дело в том, что у моего провайдера сидят несколько клиентов на одном IP через адсл, дальше мой домашний роутер и домашняя сеть. Вопрос, как связаться с сервером при таком раскладе? Понимаю, что существует НАТ, но как им воспользоваться? Или как должно выглядеть обращение в сеть? Я должен с клиента отправить запрос, содержащий все IP которые стоят на пути к серверу? Поиском пользовался, есть похожие темы, но самого ответа так и не нашел. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
С одной стороны должен быть внешний статический IP адрес. Противоположная сторона должна открывать TCP соединение с этим IP. Иначе никак
![]() |
|||
|
||||
KTatsu |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 23.8.2008 Где: Москва Репутация: 1 Всего: 1 |
Не понял... IP у меня статический.
Вот к примеру, щас мне друг послал файл через квип напрямую, у меня написано следующее в квипе: Входящий файл: 123.rar Размер: 3,89 Мб Внешний IP: 92.112.102.*** Внутренний IP: 192.168.1.*, 92.112.102.*** Т.е. для передачи, всетаки клиент использует IP, как внешний, так и внутренний. А вот в случае когда я другу передаю файл, у него пишет так: Входящий файл: 123.rar Размер: 3,89 Мб Внешний IP: 213.141.151.*** Внутренний IP: 127.0.0.1 Этого я вообще не могу понять, чепуха какая-то с внутренним ![]() Так что мне делать? Если указывать все IP на пути от провайдера до указанного компа, куда их вписывать, если графа под адрес одна? писать через запятую адреса чтоли? ![]() Это сообщение отредактировал(а) KTatsu - 11.5.2009, 19:21 |
|||
|
||||
xvr |
|
||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
IP должен быть не только статический, он еще должен быть доступен снаружи
![]()
Но этот IP сервера должен быть, и должен быть доступен снаружи.
|
||||||||||||
|
|||||||||||||
KTatsu |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 23.8.2008 Где: Москва Репутация: 1 Всего: 1 |
|
||||
|
|||||
xvr |
|
||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Если этот один ВНЕШНИЙ адрес СУЩЕСТВУЕТ - то должно получится. Если его нет - то облом, нужно менять архитектуру построения системы В ПРИНЦИПЕ. Например использовать внешние сервера или proxy
|
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |