2011-11-15 2 views
2

방금 ​​WIFI 카메라를 얻었습니다. 이 카메라에 URL 요청을 보내고 iPad에서 mpeg4 스트리밍을 재생하려면 iPad 응용 프로그램을 개발해야합니다.Xcode에서 C 언어를 사용하여 네트워크 패킷을 처리하는 방법

요청을받은 후이 카메라는 네트워크 패킷을 iPad로 보냅니다. 각 패킷의 시작 부분에는 비디오 또는 오디오와 같은이 패킷의 유형을 나타내는 8 비트의 부호없는 char이 들어 있습니다.

NSData는 16 비트 형식이므로 첫 번째 8 비트 부호없는 char을 얻고이 패킷의 유형을 어떻게 인식 할 수 있습니까?

나는 잘못된 길에 있다고 생각합니다. 패킷 계층에 초점을 맞추고 C 언어를 사용하여 네트워크 패킷을 처리하는 방법을 찾아야합니다. 그러나 나는 C 언어가 좋지 않다. 어느 누구나 C를 사용하여 네트워크 패킷을 제어하는 ​​방법을 알려줄 수 있습니까?

+0

Objective-C는 Objective-C로 작성한 경우 C에서 몇 가지 사항을 명확히 배워야합니다. – Macmade

+0

Macmade에 감사드립니다. C 프로그래밍을 더 배우려면 분명히 필요합니다. C에서 기본 개념이 너무 많이 누락되었습니다. –

+0

Objective-C에서 코드하는 법을 아는 것이 어렵지 않습니다. 특히 포인터/포인터 연산, 캐스트, 내장형, 구조, 동적 메모리 할당에 대해 배웁니다. 좋은 C 프로그래머에게 Beeing하면 더 나은 Objective-C 프로그래머가 될 것입니다. – Macmade

답변

1

NSData 개체를 사용하는 경우 bytes 메서드를 사용하여 NSData 내용에 대한 포인터를 검색 할 수 있습니다.

이 메서드는 void 포인터를 반환합니다. 원하는대로 지정할 수 있습니다. 예를 들어

:

unsigned char * x = [ myDataObject bytes ]; 

당신이 char 포인터를 가지고 당신이, 바이트 당 (8 비트) 바이트을 NSData 내용을 읽을 수 있습니다.

x[ 0 ]는 다른 형식을 사용하는 경우

, 당신은 다른 결과를 얻을 수 있습니다 첫 번째 바이트, x[ 1 ] 두 번째, 등이 될 것입니다. 예를 들어 :

unsigned short int * x = [ myDataObject bytes ]; 

가정 unsigned short int은 당신의 플랫폼에서 16 비트 (이 다를 수 있습니다), 당신은 다음 16 비트하여있는 NSData 내용에 액세스 것입니다. 마지막 예에서

, x[ 0 ]

또한 포인터 연산과 동일한 ... 등의, 제 16 비트가 될 것이다.

+0

안녕 Macmade, 내 응용 프로그램에서 이것을 시도했습니다. 그러나, 그것은 단지 나에게 읽을 수없는 숯을 주었다. typedef struct { \t guchar \t content_type; \t \t gint \t media_header_length; } stSTREAM. 이것은 패킷의 시작 부분에있는 형식입니다. 이것은 내가 왜 이런 방식으로하는 공명입니다. –