Перейти к содержанию
Fire Monkey от А до Я
  • 0

Ipv6 в datasnap


Сергей Сергеев

Вопрос

Режектят из App store, с сообщением Не коннекта в сети Ipv6. Приложение datasnap клиент, коннектится на сервер стандартно через sqlconnection , протокол tcp/ip. Кто-нибудь сталкивался с такой проблемой, как решали? Спасибо..

Пс. Читал в инете сообщения о том что в квадратные скобки надо имя Хоста помещать внутри except, при исключении при коннекте, и якобы должно помочь в сети ipv6. 

 

Изменено пользователем Сергей Сергеев
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

а сам хост(сервер) имеет IPv6 адрес?

вот у меня тоже самое было, пока не выдал провайдер IPv6 адрес, я не смог опубликовать

Ссылка на комментарий
  • 0
В 15.04.2017 в 13:09, Равиль Зарипов (ZuBy) сказал:

а сам хост(сервер) имеет IPv6 адрес?

вот у меня тоже самое было, пока не выдал провайдер IPv6 адрес, я не смог опубликовать

спасибо за подсказку.. в пнд буду разбираться и со скобками, вокруг хоста, и с адресом сервера..

Ссылка на комментарий
  • 0

Проблема решена - приложение в Апп сторе.

Опишу как решил.

Конфигурация - Berlin 10.1 - update 2, Xcode 8.

Datasnap сервер, использую tcpIp.

Компоненты на клиенте TSqlConnection - для Datasnap, TIdTcpClient - использую для проверки соединения перед открытием ДатаСнар соединения, т.к. в нем не работает ТаймОут и есть вероятность "залипнуть"

Сервер так и остался в ИП4  ( вначале хотел перевести его в ип6, но провайдер МТС ответил, что такие адреса не дает, сделал туннель с tunnelbroker.net  на тестовый сервер, но так и не пригодилось ( кстати бесплатно, но без гарантии пропускной способности)  .

Никаких квадратных скобок , если у вас имена хостов а не ИП адреса не нужны.

Смысл простой - у обоих компонентов нужно выставить свойства протоколов в зависимости от сети нахождения клиента.

Вначале ставлю у обоих ИПв4, если коннект ексептиться - то ставлю ипв6 и еще раз пробую коннектится. и только второй ексепт скажет, что сети действительно нет.

 function TClientModule1.gethost(aHost : string):string;
  var
   dbxProps: TDBXDatasnapProperties;
begin


 try
      TabbedForm.HostDS := TabbedForm.Host4;
      TabbedForm.HostP := TabbedForm.Host4;

 // ставим все в ип4
  IdTCPClient1.IPVersion :=     TIdIpVersion.Id_IPv4;
  IdTCPClient1.Host:=TabbedForm.Host4;
  IdTCPClient1.Port:=StrToInt(TabbedForm.port); //порт сервера DataSnap
  idTCPClient1.ConnectTimeout := 12000; //заданный тайм-аут

    Assert(SQLConnection1.DriverName = 'DataSnap', 'Driver must be DataSnap');
  dbxProps := SQLConnection1.ConnectionData.Properties as TDBXDatasnapProperties;
  dbxProps.CommunicationProtocol := 'tcp/ip';
  dbxProps.CommunicationIPVersion := 'IP_IPv4';


  IdTCPClient1.Connect;

   if IdTCPClient1.Connected
    then
    begin
    //подключились
      result:=TabbedForm.Host4;
      TabbedForm.HostDS := TabbedForm.Host4;
      TabbedForm.HostP := TabbedForm.Host4;
      IdTCPClient1.Disconnect;
    end;
 except
 on E: Exception
 do begin
  //toast ('IPv4 except '+E.Message);


    try
        IdTCPClient1.IPVersion :=     TIdIpVersion.Id_IPv6;
        IdTCPClient1.Host:= TabbedForm.Host6P;
        IdTCPClient1.Port:=StrToInt(TabbedForm.port); //порт сервера DataSnap
        idTCPClient1.ConnectTimeout := 12000; //заданный тайм-аут

        IdTCPClient1.Connect;

             if IdTCPClient1.Connected
              then
              begin
          //подключились
                result:=TabbedForm.Host6DS;
                  TabbedForm.HostDS := TabbedForm.Host6DS;
                  TabbedForm.HostP := TabbedForm.Host6P;
                IdTCPClient1.Disconnect;

                dbxProps.CommunicationIPVersion := 'IP_IPv6';
              end;
    except
    on E: Exception do begin
          //не подключились
          result:='Не подключились';
        dbxProps.CommunicationIPVersion := 'IP_IPv4';
        IdTCPClient1.IPVersion :=     TIdIpVersion.Id_IPv4;
        TabbedForm.HostDS := TabbedForm.Host4;
        TabbedForm.HostP := TabbedForm.Host4;

    end;
      end;
    end;
   end;

Тут немного есть излишества кода - думал что для Ип4 и Ип6 будут разные имена хостов, но сейчас это одно и тоже имя Сервера  который находится в Ип4 и не имеет ни выхода ни адреса в ип6.

вызвав эту фунцию я заполняю глобальные переменные  ( ds- датаснап сервер. P- для пробного открытия ("пинг" )) на самом деле они тоже одинаковые.

клиента проверял, как описано http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/

т.е. макбук подключен через 3ж модем в сеть и через WiFi раздает ИпВ6 сеть и Айфон к ней  присоединен. Если приложение работает в этой внутренней ипв6 сети, то все - проблема решена - Аппле именно так и проверяет.

 

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...