[iPhone][MonoTouch] 네번째 샘플 : WhatsMyIP

이번 예제는 간단히 현재 iPhone에 설정 된 IP주소를 확인하는 어플리케이션입니다. 

Appsamuck 샘플 : WhatsMyIP

IP주소는 보통 각 언어에서 제공하는 라이브러리를 통해서 얻습니다. 원 샘플도 Objective-C의 NSHost라는 것을 통해서 얻고 있습니다. 
NSHost	*localHost = [NSHost currentHost];
NSString *ip    = [localHost address];

C#은 "System.Net.Dns"를 사용합니다. MonoTouch는 제공하는 기능의 일부만 제공합니다. 비동기 처리를 제공하는 API는 사용할 수 없습니다. (만들어서 추가 할 수 있습니다. ^.^;)


새 솔루션을 생성하는 것으로 시작합니다.

1. 새 솔루션을 생성합니다.  
    솔루션 이름 : WhatsMyIP

2. 간단히 IP주소만을 보여주는 것이기 때문에 뷰를 추가하거나 아니면 윈도우에 두개의 레이블을 사용합니다.  예제에선 뷰를 추가했습니다. MainWindow.xib를 통해 Interface Builder를 실행시키고 Window에 추가합니다. 각 객체의 계층관계는 화면에 나와 있는 대로 구성해 줍니다. 
    - View
    - UILabel  
        Text : "IP Address :"
    - UILabel 
        Text : "127.0.0.1"
3. "App Delegate"의 Identity 윈도우에서 Outlet을 추가하고 각 객체를 연결합니다.
    - Outlet
            ipaddressLabel : UILabel
여기까지 했으면 저장하고 Interface Builder를 종료합니다.
MainWindow.xib.designer.cs 파일을 열고 Outlet의 추가된 내용이 있는지 확인 할 수 있습니다. 
namespace WhatsMyIP {


// Base type probably should be MonoTouch.Foundation.NSObject or subclass
[MonoTouch.Foundation.Register("AppDelegate")]
public partial class AppDelegate {

[MonoTouch.Foundation.Connect("window")]
private MonoTouch.UIKit.UIWindow window {
get {
return ((MonoTouch.UIKit.UIWindow)(this.GetNativeField("window")));
}
set {
this.SetNativeField("window", value);
}
}

[MonoTouch.Foundation.Connect("ipaddressLabel")]
private MonoTouch.UIKit.UILabel ipaddressLabel {
get {
return ((MonoTouch.UIKit.UILabel)(this.GetNativeField("ipaddressLabel")));
}
set {
this.SetNativeField("ipaddressLabel", value);
}
}

}
}
4. Main.cs파일을 편집기로 열고, 다음 코드를 추가합니다.
		public void getIPAddress()
{
String hostName = Dns.GetHostName();
Console.WriteLine("hostName = {0}", hostName);
IPAddress[] ipAddress = Dns.GetHostAddresses(hostName);

if(ipAddress.Count() > 0) ipaddressLabel.Text = ipAddress[0].ToString();
}
IP를 구하는 순서는 다음과 같습니다. 각 함수는 System.Dns에서 제공하는 것입니다.

              a) 로컬의 호스트 이름을 구합니다.   hostName = Dns.GetHostName() ;
              b) 호스트이름에 할당되어 있는 IP 주소를 구합니다. ipAddress = Dns.GetHostAddresses(hostName);
              c) IP주소를 사용합니다.

하나의 도메인에 여러개의 주소가 할당 될 수 있습니다. 따라서 (b)에서 구한 결과는 배열값입니다. 코드에서도 구한 결과의 첫번째 값을 표시하고 있습니다. (꼭 첫번째 값이 아닐 수도 있습니다.)

Console.WriteLine()은 디버깅 창(일본어 판은 "어플리케이션 출력")에 내용을 출력하기 위해 사용했습니다. 개발한 어플리케이션을 디버깅하는데 유용하게 사용 됩니다. 

5. override된 FinishedLaunching함수에 getIPAddress()함수를 호출하도록 추가 합니다.
		public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
// If you have defined a view, add it here:
// window.AddSubview (navigationController.View);
getIPAddress();

window.MakeKeyAndVisible ();

return true;
}

6. 컴파일하고 실행시켜 봅니다. 

제공되는 다양한 라이브러리를 사용할 수 있다는 것을 보여주는 예입니다. Mono와 호환되는 라이브러리는 일부 지원이 안되는 API들이 있지만 큰 어려움 없이 MonoTouch에서도 사용할 수 있습니다.  

C#에 익숙한 개발자 입장에선 Objective-C의 라이브러리를 힘들여 배우지 않아도 되는 환경이 된 것입니다. ^.^

오늘은 여기까지...

-----------
헉, 태그가 100자 이내에서만 가능하네요...-.-;;

by 연서아빠 | 2009/10/04 09:13 | iPhone | 트랙백 | 덧글(0)

트랙백 주소 : http://neojjang.egloos.com/tb/1954893
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶