Вопрос

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

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

 

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

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


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

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

  • 0

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

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

Сергей Сергеев и Kitty понравилось это

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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 сети, то все - проблема решена - Аппле именно так и проверяет.

 

 

Rusland и Kitty понравилось это

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу