【问题标题】:Datasnap "network is unreachable" error over IPv6IPv6 上的 Datasnap“网络无法访问”错误
【发布时间】:2016-10-17 13:17:44
【问题描述】:

当我尝试通过 IPv6 网络连接到 Datasnap REST 服务器时,我收到套接字“网络无法访问”错误。

我正在使用TDSRestConnection 进行连接。我在HostName 属性中设置了我的服务器名称。

【问题讨论】:

标签: ios delphi ipv6 delphi-xe8 datasnap


【解决方案1】:

服务器端需要向其公共 DNS 添加一个注册类型 AAAA。这是 IPv6 的 DNS64。因此,此寄存器的值是 Google NAT64 前缀 (64:FF9B::) + 您的 IPv4。

如果公网 IP 例如为 200.123.12.34,则 AAAA 寄存器值为 64:FF9B::200.123.12.34。 R. 另一个值是您的域名,例如 myapp.mydomain.com 或 myapp.mydomain.com.br。您需要做的另一件事是实现一个函数来在您的 Iphone 位于 IPv6 网络中时解析名称。

以上示例不适用于 REST DATASNAP 客户端。在我的示例下面,我已经在我的 datasnap 客户端模块上实现了它。

const
  S_HOST_NAME = 'myapp.mydomain.com';

var
  control : integer;

implementation

procedure TfrmClientModule.conect;
var
  x : string;
begin
  try
    control := control + 1;
    if control < 3 then
    begin
      DSRestConnection.Reset;
      x := ServerMethods1Client.ReverseString('yx');
    end;
  except
    if DSRestConnection.Host = S_HOST_NAME then
      DSRestConnection.Host := '[' + S_HOST_NAME + ']'
    else
      DSRestConnection.Host := S_HOST_NAME;
    conect;
  end;
end;

procedure TfrmClientModule.DataModuleCreate(Sender: TObject);
begin
    Controle := 0;
    DSRestConnection.Host :=  '[' + S_HOST_NAME + ']';
    conect;
end;

【讨论】:

  • 不不不。切勿将 RFC 6052 地址作为 AAAA 记录放在公共 DNS 中。这将阻止 IPv6 用户通过 IPv6 访问您的站点。
  • 该问题是客户端问题。不能保证张贴者甚至可以访问服务器。您无需回答“每个人”,只需回答问题即可。此外,在创建答案时,请按文本输入窗口上方工具栏中的帮助按钮以了解如何设置文本格式。该代码看起来很糟糕,因为您没有将其缩进 4 个空格以将其放入代码块中。这样做不会在技术上或就问题解决您的答案,但您可以看到它如何提高其可读性。
猜你喜欢
  • 1970-01-01
  • 2017-04-16
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 2014-01-29
  • 2020-12-25
相关资源
最近更新 更多