2010-05-11 2 views
0

ASyncSocket을 사용하여 UIImages를 한 장치에서 다른 장치로 옮깁니다.소켓에서 NSData에서 UIImages를 가져 오는 방법

기본적으로 하나 개의 장치에 내가 가진 :

NSMutableData *data = UIImageJPEGRepresentation(image, 0.1); 

if(isRunning){ 
    [sock writeData:data withTimeout:-1 tag:0]; 
} 

그래서 새로운 이미지가 소켓에 모든 너무 자주 (웹캠 등)이 추가됩니다.

그런 다음, 다른 장치에, 나는 호출 오전 :

[listenSocket readDataWithTimeout:1 tag:0]; 

는 응답합니다 : 내가 할 수 있기를 원하는, 기본적으로

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 
{ 
    [responseData appendData:data]; 
    [listenSocket readDataWithTimeout:1 tag:0]; 
} 

되는 NSTimer가는이있는 @selector (PullImages)를 호출합니다.

-(void) PullImages { 

여기에서 ResponseD에서 이미지를 가져올 수 있기를 원합니다. ata. 어떻게해야합니까? 아직 완전한 이미지가 아닐 수도 있고, 여러 개의 이미지가있을 수 있으며, 1 개의 이미지가있을 수 있습니다!

각 기존 이미지에 NSData를 구문 분석하고 싶습니다!

} 

어떤 도움이 필요합니까? 미리 감사드립니다!

답변

2

이미지 주위에 고유 한 래퍼 프로토콜을 구현해야합니다. 이는 실제 이미지 데이터 앞에 이미지 데이터의 길이를 보내는 것처럼 간단 할 수 있습니다. 데이터를받을 때 전체 이미지를 만들기 전에 몇 바이트를 가져와야하는지 알 수 있습니다. 각 이미지가 스트림에서 분리되면 다음 이미지의 길이를 갖게됩니다.

하나의 iPhone에서 다른 iPhone으로 전송할 때 endianess에 대해 걱정할 필요가 없으며 양 끝에 32 비트 int를 사용할 수 있습니다.

+0

아, 당연히해야 할 일이 없길 바랬습니다. 정수를 먼저 얻는 방법은 무엇입니까? 상황이 int, image, int, image 등으로 덤프되고 있다고 가정 할 수 있습니까? 처음 몇 바이트를 읽은 다음 지정된 바이트 수를 읽은 다음 다음 몇 바이트를 읽은 다음 지정된 바이트 수를 읽으시겠습니까? 예제 또는 레이아웃을 제공해 주시겠습니까? 특정 코드가 필요하지 않습니다. –

+0

tcp 소켓을 사용하고 있다면, 예, 이미지 앞에 길이가 올 것이라고 가정 할 수 있습니다. 그런 다음 처음 4 바이트 (int에 대해)를 읽고 4 바이트의 값을 데이터 버퍼에 읽습니다. – Elfred

0

구분 기호를 사용하면 다른 이미지를 구분할 수 있습니다. 구분 기호를 잡으면 다른 이미지가 다음에옵니다.