본문 바로가기

Software/iOS & Objective-C

네트워크 in iPhone & iPad

아이폰에서 TCP를 이용하는 방법은 다음과 같이 나뉜다.

1. BSD socket API를 이용하는 방법
2. CF Networking 관련 라이브러리를 이용하는 방법
3. NSStream 클래스를 이용하는 방법

BSD socket API는 일반적으로 GCC 환경에서 사용하는 소켓(Socket)과 관련된 API로,
쉽게 말해 기존의 TCP 소켓 프로그래밍 방법을 그대로 이용할 수 있는 것이다.

CF Networking 관련 라이브러리는 Cocoa에서 제공하는 네트워킹 관련 API들로, 앞의
BSD socket API를 좀더 쉽게 다듬어 둔 형태라고 본다.

더불러 Run Loop에 대한 동작을 포함함으로써 별개의 스레드(Thread)를 생성하지 않고도
상대적으로 쉽게 소켓 프로그래밍을 할 수 있도록 하고 있다. 

NSStream 관련 클래스들은 Cocoa에서 제공하는 상위 레벨의 API로 CF Networking 라이브러리에서
제공하는 CFSocket 을 이용하여 비동기화 형태로 네트워킹을 상당히 이용하기 쉽게 구연하고 있다.
(네트워킹과 관련된 이벤트를 Delegate의 형태로 받음으로서 코드에서 네트워크 모듈과
 네트워크 모듈이 아닌 다른 부분을 쉽게 분리할 수 있도록 해 준다.)

 
IP를 알자!!! 

클라이언트가 연결되려면 서버 쪽의 IP를 정확히 아록 있어야 한다.
아이폰과 같은 모바일 기기는 그위치가 수시로 변화하기 때문에 IP 역시 자주 변하게 되고 이러한 조건에서 자기 호스트의 IP를 정확히 안다는 것이 쉽지 않다. 특히 무선랜을 사용하는 환경에서는 대부부분 DHCP를 이용해 아이피가 동적으로 할당되기 때문에 정확한 IP를 알기가 더욱 쉽지 않다.

이와 같은 상황에서 자신의 IP를 알기 위한 테크닉은 여러 가지가 있지만,  여기서는 NSHost 클래스를 이용해 보자. NSHost 클래스는 현재 아이폰 SDK에서 공식적으로 지원하지 않는 API이다.
따라서 빌드 타겟이 시뮬레이터일 때는 문제가 없지만, 디바이스(아이폰,아이팟 터치)가 되면
NSHost 클래스를 사용하는 부분에서는 경고 메시지가 뜬다.

 
반응형