2012-04-06 50 views
12

Tôi đang cố gắng lấy địa chỉ IP cục bộ của thiết bị Android của mình bằng Mono cho Android, nhưng không thành công.Nhận địa chỉ IP cục bộ

Mã tôi sử dụng cho các khuôn khổ đầy đủ và nhỏ gọn là thế này:

var iplist = (from a in Dns.GetHostAddresses(Dns.GetHostName()) 
       where a.AddressFamily == AddressFamily.InterNetwork 
       select a).ToArray(); 
LocalAddress = iplist[0]; 

Dưới M4A, tuy nhiên, nó rơi xuống đầu - các Dns.GetHostName() gọi không thành công với

System.Net.Sockets.SocketException: An address incompatible with the requested protocol was used

Có sự cố đã biết với Dns.GetHostName trong M4A không? Có cách nào khác để lấy địa chỉ cục bộ bằng M4A không?

Trả lời

8

Nó chỉ ra rằng đây là một ngoại lệ được ném vào bên trong của việc thực hiện Mono Socket, liên quan đến thời gian chạy cố gắng xác định xem IPv6 có được hỗ trợ hay không (source here, dòng 810).

Trường hợp ngoại lệ được ném lần đầu tiên bạn cố sử dụng bất kỳ Ổ cắm nào dưới Mono và có thể được bỏ qua một cách an toàn. Nếu bạn đang chạy với trình gỡ lỗi của mình để "Phá vỡ tất cả các ngoại lệ được ném", đôi khi tôi thực hiện để đảm bảo tính sạch sẽ của mã, bạn sẽ phải tắt cụ thể SocketExceptions hoặc chỉ Tiếp tục quá giờ ngắt này.

+0

Công việc tuyệt vời trả lời câu hỏi của riêng bạn. Và cảm ơn bạn đã chia sẻ nó với phần còn lại của chúng tôi. –

Các vấn đề liên quan