2016-10-17 68 views
0

當我嘗試通過IPv6網絡連接到Datasnap REST服務器時,出現套接字「network is unreachable」錯誤。Datasnap「network is unreachable」error over IPv6

我正在使用TDSRestConnection進行連接。我在HostName屬性中設置了我的服務器名稱。

+0

已知問題,請參閱(http://stackoverflow.com/questions/37691084/)和[用的DataSnap IPv6連接] [IPv6的的DataSnap(iOS應用)](http://community.embarcadero.com/答案/ IPv6的的DataSnap-IOS-APP)。 –

回答

-2

服務器端需要向其公有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 CLIENTS不起作用。在我的例子下面,我已經在我的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; 
+0

否否否。不要將RFC 6052地址作爲AAAA記錄存放在公共DNS中。這將防止IPv6用戶通過IPv6訪問您的網站。 –

+0

問題是客戶端問題。不能保證海報甚至可以訪問服務器。你不需要解決「每個人」只是回答這個問題。另外,在創建答案時,請按下文本輸入窗口上方工具欄中的幫助按鈕,以瞭解如何格式化文本。代碼看起來很可怕,因爲你沒有縮進它的4個空格來放入一個代碼塊。這樣做不會在技術上或解決問題時解決問題,但您可以看到它如何提高可讀性。 – clearlight

相關問題