IPv6 전용 환경에서 연결할 수 있어야하는 새로운 iOS 요구 사항을 처리하기 위해 소켓 코드를 업데이트하고 있습니다.호스트 이름에서 IPv6 주소 확인
우리는 현재 .NET 소켓과 TcpClient를 사용하고 있습니다.
IPv6와 IPv4가 모두 작동하는 솔루션을 설정하려고하지만 지금까지 아무 것도 일어나지 않았습니다.
내가 사용하는 경우 :
IPv6 환경에서TcpClient client = new TcpClient();
client.BeginConnect("server.hostname.com", 8182, this._onConnect, client);
, 내가 응답을 얻을; _onConnect
메서드가 실행되지 않습니다.
내가 사용하는 경우 :
TcpClient client = new TcpClient(AddressFamily.InterNetworkV6);
client.BeginConnect("server.hostname.com", 8182,this._onConnect, client);
내가
SocketException
를 얻을 : 이해할 경우, 짜증나는
An address incompatible with the requested protocol was used (errorCode: 10047, socketErrorCode: AddressFamilyNotSupported, nativeErrorCode: 10047)
. 내가 사용하는 경우 :
TcpClient client = new TcpClient(AddressFamily.InterNetworkV6);
client.BeginConnect("xxxx:xxxx:xxxx::xxxx:xxxx", 8182,this._onConnect, client);
을 그리고 나는 그러나, 연결할 수 있습니다
-
지금
- 이 의지 좋지 않아 대신 호스트 이름의 원시 IP 주소에 걸었습니다
- IPv4 환경에서 더 이상 작동하지 않습니다.
그래서 호스트 이름에서 지원되는 IP를 가져 와서 다른 하나에 연결하려고 시도했습니다. 이 코드
:
IPHostEntry hostInfo = Dns.GetHostEntry("server.hostname.com");
foreach(IPAddress ip in hostInfo.AddressList)
Debug.Log("Ip: " + ip.ToString() + ": address family: " + ip.AddressFamily);
그것은 단지 슈퍼 도움이되지는 IPv4 IP를, 인쇄 할 수 있습니다.
내가 뭘 잘못하고 있니? 문자열 호스트 이름에서 IPv6 IP를 가져 오는 방법은 무엇입니까? 아니면 이것을 해결할 더 좋은 방법이 있습니까?
나는 이것이 DNS 수준에서 자동 해결 될 것이라고 생각했지만, Unity에 포함 된 Mono 버전은 최신 버전이 아닌 것 같습니다.
감사
그것의 닷넷 (I와 함께 제공되는'System.Net.Sockets.TcpClient' 클래스 Unity가 .Net 2.0에 있다고 생각하십시오.) : https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(v=vs.80).aspx – divillysausages