IPv6 네트워크를 통해 Datasnap REST 서버에 연결하려고하면 "네트워크에 연결할 수 없습니다"라는 오류 메시지가 나타납니다.Datasnap IPv6를 통한 "네트워크에 연결할 수 없습니다"오류
나는 TDSRestConnection
을 사용하여 연결합니다. 내 서버 이름을 HostName
속성에 설정했습니다.
IPv6 네트워크를 통해 Datasnap REST 서버에 연결하려고하면 "네트워크에 연결할 수 없습니다"라는 오류 메시지가 나타납니다.Datasnap IPv6를 통한 "네트워크에 연결할 수 없습니다"오류
나는 TDSRestConnection
을 사용하여 연결합니다. 내 서버 이름을 HostName
속성에 설정했습니다.
서버 측에서는 공용 DNS에 등록 유형 AAAA를 추가해야합니다. IPv6 용 DNS64입니다. 따라서이 레지스터의 값은 Google NAT64 접두어 (64 : FF9B : :) + IPv4입니다.
예를 들어 공인 IP가 200.123.12.34 인 경우 AAAA 레지스터 값은 FF9B :: 200.123.12.34가됩니다. R. 또 다른 값은 myapp.mydomain.com 또는 myapp.mydomain.com.br과 같은 도메인 이름입니다. 당신이해야 할 다른 일은 아이폰이 IPv6을 가진 네트워크에있을 때 이름을 알아내는 함수를 구현하는 것입니다.
위의 예제는 REST DATASNAP CLIENT에서는 작동하지 않습니다. 내 예제 아래에, 내 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;
아니요 아니요 아니요. 공개 DNS에 RFC 6052 주소를 AAAA 레코드로 사용하지 마십시오. 이렇게하면 IPv6 사용자가 IPv6을 통해 귀하의 사이트에 액세스하는 것을 방지 할 수 있습니다. –
질문은 클라이언트 쪽 질문입니다. 포스터가 서버에 액세스 할 수 있다는 보장은 없습니다. '모두에게'라는 질문에 답할 필요는 없습니다. 또한 답변을 만들 때 텍스트 입력 창 위의 툴바에있는 도움말 버튼을 눌러 텍스트 형식을 지정하는 방법을 학습하십시오. 코드 블록에 넣기 위해 4 칸을 들여 쓰지 않았기 때문에 코드는 끔찍한 것처럼 보입니다. 그렇게하면 기술적으로 또는 질문과 관련하여 답이 수정되지는 않지만 가독성이 어떻게 개선되는지 확인할 수 있습니다. – clearlight
알려진 문제 [의 IPv6 데이터 스냅와 연결 (http://stackoverflow.com/questions/37691084/) 및 참조 [IPv6의 DATASNAP (IOS 애플리케이션) (http://community.embarcadero.com/ answers/ipv6-datasnap-ios-app). –