當我嘗試通過IPv6網絡連接到Datasnap REST服務器時,出現套接字「network is unreachable」錯誤。Datasnap「network is unreachable」error over IPv6
我正在使用TDSRestConnection
進行連接。我在HostName
屬性中設置了我的服務器名稱。
當我嘗試通過IPv6網絡連接到Datasnap REST服務器時,出現套接字「network is unreachable」錯誤。Datasnap「network is unreachable」error over IPv6
我正在使用TDSRestConnection
進行連接。我在HostName
屬性中設置了我的服務器名稱。
服務器端需要向其公有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;
否否否。不要將RFC 6052地址作爲AAAA記錄存放在公共DNS中。這將防止IPv6用戶通過IPv6訪問您的網站。 –
問題是客戶端問題。不能保證海報甚至可以訪問服務器。你不需要解決「每個人」只是回答這個問題。另外,在創建答案時,請按下文本輸入窗口上方工具欄中的幫助按鈕,以瞭解如何格式化文本。代碼看起來很可怕,因爲你沒有縮進它的4個空格來放入一個代碼塊。這樣做不會在技術上或解決問題時解決問題,但您可以看到它如何提高可讀性。 – clearlight
已知問題,請參閱(http://stackoverflow.com/questions/37691084/)和[用的DataSnap IPv6連接] [IPv6的的DataSnap(iOS應用)](http://community.embarcadero.com/答案/ IPv6的的DataSnap-IOS-APP)。 –