• 0
Сергей Сергеев

Ipv6 в datasnap

Вопросы

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 ответа на этот вопрос

  • 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 сети, то все - проблема решена - Аппле именно так и проверяет.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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