0 / 0 / 0
Регистрация: 18.06.2016
Сообщений: 4
|
|||||||||||
1 | |||||||||||
RAD XE3+ WeBSockets Клиент - Сервер Делфи не соединяется по Интернету30.04.2019, 11:43. Показов 2986. Ответов 7
Здравствуйте! Помогите с проблемой. Пытаюсь разобраться с библиотекой WEBSockets, TidWEBHTTPClient и TidWEBServer, использую эти компоненты для обмена данными. Программа умеет соединять ся по сети и отправлять текстовую информацию и картинки. Но когда пытаюсь подключиться к серверу через интернет. выдает ошибку Connect time out.
Клиент подключается так (сделал 2 варианта по примерам которые нашел) не работает ни один.
Инфы по теме очень не много, приходится методом тыка все проверять, нашел пару примеров использования, но они все по сети. Помогите модифицировать код или скиньте рабочий пример пожалуйста. Очень нужно!!! Времени в обрез.
0
|
30.04.2019, 11:43 | |
Ответы с готовыми решениями:
7
Передача данных, клиент-сервер по интернету Связь между компьютерами по интернету (сервер, клиент) Компонент для связи клиент/сервер по интернету Связь между компьютерами по интернету (сервер, клиент) |
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
01.05.2019, 16:09 | 2 |
Причин может быть тьма тьмущая. Проверку надо делать не пробрасывая порты на роутере (который, кстати, несмотря на то, что вам показывает myip, вполне может и скорее всего имеет серый айпишник, которому никакие пробросы порта не помогут), а на своем ПК, подключаясь к localhost или 127.0.0.1. Это позволит практически полностью исключит проблемы, связанные с транспортным протоколом и даст "чистый" результат.
А почему выбор пал на TidWebHTTP? Есть ведь TidHTTP и TidHTTPServer, с которыми работают значительно чаще.
0
|
0 / 0 / 0
Регистрация: 18.06.2016
Сообщений: 4
|
|
04.05.2019, 14:07 [ТС] | 3 |
Я понимаю про серый IP. Возможно и такое, у меня есть комп с белый постоянным IP. Там результат такой же.
Почему выбор пал на Web, потому что по сути это тоже самое что и обычный httpclient, просто эти компоненты работают асинхронно. т.е. обработка сообщений упрощается. У меня просто совсем нет опыта в разработке клиент серверных приложений. Я много чего не знаю по этой теме. Для меня не принципиально какой компонент использовать, главное чтоб работало. Часть программы работающей по сети дописываю уже. Здесь проще все, а вот последний этап передачи данных через web совсем никак не идет. мне бы любой рабочий код примера, как это реализуется с точки зрения именно клиент-серверного приложения. просто все примеры в сети в основном тупо клиентятся к какому-нибудь сайту. Этот вариант мне не подходит...
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|||||||||||
05.05.2019, 07:58 | 4 | ||||||||||
Асинхронность, имхо, спорный плюс, если речь не идет о каких-то значимых нагрузках.
Лично я последний раз для своих целей использовал связку idHTTPServer + NetHTTPClient. Со стороны клиента выглядит вот так:
Со стороны сервера:
1
|
0 / 0 / 0
Регистрация: 18.06.2016
Сообщений: 4
|
|
05.05.2019, 17:02 [ТС] | 5 |
Спасибо за код! TIdWebsocketServer создан на основе TidHTTPServer. Так что разницы нет особо, какой компонент использовать. Вопрос как использовать) Вы создаете сервер не указывая порт прослушки, так должно быть?
Или какие-то установки не попали в пример? Можно весь код создания сервера? или рабочий пример. Сервак на чем висел? Коннект проверяли по вебу или только сеть? У меня проблема в отсутствии шаблона правильной инициализации сервера и создания условий для его работы... Т.е. Есть условия, белый ip, проброс портов в роутере, комп с работающим сервером. Как с такой конфигурацией инициализировать правильно сервер? Данные будут передаваться как текст, так и графика, и требуется постоянный коннект и частая передача данных, потому и выбрал асинхронный компонент.
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
05.05.2019, 18:56 | 6 |
Нет. Заполняйте свойство DefaultPort или покопайтесь в Bindings.
Нет. Основное я привел, остальное смысла выкладывать нет. То же с рабочим примером: приведенного уже достаточно, чтобы пример был рабочим. Ваша терминология меня несколько ставит в тупик. Что значит "на чем висел"? Веб - это вы имеете ввиду глобальную сеть? На самом деле, мне не принципиально, я уже далеко не первый проект делаю, и просто на TCP/IP, и по HTTP, которые работают как в локальной сети, так и в глобальной (по сути, в плане программирования разницы быть не должно). Дак сам по себе компонент - это и есть шаблон. Навесьте на него событие, которое будет обрабатывать GET-запросы, задайте начальные параметры - и понеслась. Пример я вам привел. Я вам уже писал - сначала отладьте ваш сервер на локальной машине, убедитесь, что у вас все работает, а потом уже лезьте в глобальную сеть. Иначе в потоке ошибок пробросов портов, ошибочных белых айпишников, блокирующих файрволлов и еще кучи всякой дребедени вы замучаетесь ловить причину вашего "неконнекта". Это не HTTP. Постоянный коннект - это TCP/IP, например.
0
|
0 / 0 / 0
Регистрация: 18.06.2016
Сообщений: 4
|
|
07.05.2019, 11:27 [ТС] | 7 |
Спасибо за ответ. Но суть проблемы так и не изменилась. Я знаю как настроить сам компонент для работы, а также перехватывать и обрабатывать запросы на сервере и на локалке все работает. Проблема в том что, то что работает на локалке пусть даже взять Ваш пример, не хочет работать через интернет. Условия которые у меня есть я Вам уже описал. Суть вопроса в том что возможно я не знаю всех тонкостей настройки сервера для работы по следующей схеме (Комп->роутер->WWW<-роутер<-Клиент). Потому и просил работающий в таком режиме пример чтобы разобрать его код и понять где я допускаю ошибку. Но раз Вы считаете что мне такой пример ни к чему, постараюсь разобраться сам. В любом случае, спасибо, за то что уделили время моей проблеме!
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
07.05.2019, 12:50 | 8 |
Поймите простую вещь. Для компьютера, который является у вас сервером (даже если это тот же комп, где вы запускаете программу) нет никакой разницы, как и откуда до него "достучится" клиент. Если у вас все работает в локальной сети, и не работает в глобальной, то наиболее вероятная причина не в вашей программе, а в сетевых настройках. Может быть, блокирует файрволл. Может быть, вы неправильно сделали проброс портов. Может быть, то, что вы считаете белым айпишником, на самом деле таковым не является. Или является, но не на вашем роутере.
Особенно, если вы не лезли в bindings и не привязывали там '127.0.0.1' или 'localhost', то программных причин для проблем я не вижу. Более того, у меня в коде, который я вам не привел, вообще нет ни одной строки, которая бы могла повлиять как-то на работу в глобальной сети, и при этом не влиять на работу в локальной. Оно либо работает везде, либо не работает нигде. Главное, что вам надо запомнить: если работает локально, то будет работать и глобально. Если не работает глобально - надо искать причину в сетевых настройках. P.S. Ну и, главное правило: слушайте умных людей, но не забывайте, что и умные люди иногда ошибаются. Я могу заявлять многие вещи супербезаппеляционно, потому что они работают у меня и мой опыт позволяет мне считать именно так, как я говорю, но при этом по факту ошибаться и вводить вас в заблуждение без злого умысла.
1
|
07.05.2019, 12:50 | |
07.05.2019, 12:50 | |
Помогаю со студенческими работами здесь
8
Клиент-сервер: как создать игру по интернету с сервером? Клиент-сервер в Делфи 7 ПРограма клиент сервер на Делфи Клиент-сервер по интернету. Какой IP указать для сервера, если ПК - в общежитии с 1 роутером Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |