2010-05-20 6 views
3

GameKit 프레임 워크를 사용하여 블루투스를 통해 파일을 보내려고합니다. 내가 가지고있는 문제는 한 번에 하나의 NSData 객체 만 보낼 수 있지만 다른 끝에 저장해야한다는 것입니다. 이것은 분명히 파일명을 모른 채로는 가능하지 않지만, 어떻게 전송할지는 모른다. 나는 문자열을 NSData*data = [NSData dataWithContentsOfFile:urlAddress];으로 변환하려고 시도했지만, NSData 객체를 2 개만 보낼 수는 있습니다.GameKit 블루투스 전송 문제

아무도이 문제를 아직 경험하지 못 했습니까?

답변

13

잠시 GameKit을 사용해 본 결과, '보내기'당 약 90k의 제한이 있다는 것을 알았습니다. 따라서 파일 크기가 90k보다 크다면 해체해야합니다. 여기에 내가 당신이 일 휴식 제안 방법 : - 귀하의 파일의 이름을 보내기

NSData* fileNameData = [fileNameStr dataUsingEncoding: NSASCIIStringEncoding]; 
// send 'fileNameData' 

는 2 -

1 덩어리의 수를 전송하여 보낼 것을

NSUInteger fiftyK = 51200; 
NSUInteger chunkCount = (((NSUInteger)(srcData.length/fiftyK)) + ((srcData.length % fiftyK) == 0) ? 0 : 1)) 
NSString chunkCountStr = [NSString stringWithFormat:@"%d",chunkCount]; 
NSData* chunkCountData = [chunkCountStr dataUsingEncoding: NSASCIIStringEncoding]; 
// send 'chunkCountData' 

3 - 분리하여 NSData 객체를 각각 50k 미만의 NSObject 세트로 전송하십시오 (안전한 크기가되도록).

NSData *dataToSend; 
NSRange range = {0, 0}; 
for(NSUInteger i=0;i<srcData.length;i+=fiftyK){ 
    range = {i,fiftyK}; 
    dataToSend = [srcData subdataWithRange:range]; 
    //send 'dataToSend' 
} 
NSUInteger remainder = (srcData.length % fiftyK); 
if (remainder != 0){ 
    range = {srcData.length - remainder,remainder}; 
    dataToSend = [srcData subdataWithRange:range]; 
    //send 'dataToSend' 
} 

은 수신 측에서 당신은 다음을 수행 할 수 있습니다 :

1 - 파일 이름을 수신

// Receive data 
NSString* fileNameStr = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding] 

2 - 당신이에 대한 청크의 수를받을 수신

// Receive data 
NSString* chunkCountStr = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding] 
NSUInteger chunkCount = [chunkCount intValue]; 

3 - 데이터 덩어리 받기

NSMutableData data = [[NSMutableData alloc]init]; 
for (NSUInteger i=0; i<chunkCount;i++){ 
    // Receive data 
    [data appendData:receivedData]; 
} 

모든 것이 성공한 경우 이제 파일 이름이 포함 된 fileNameStr 개체와 파일 내용이 포함 된 data 개체가 생깁니다. 이 도움이

희망 - AYAL 상세한 응답

+0

감사 AYAL, 나는 밖으로 곧 당신의 코드를 확인하고 당신이 어떻게 갔는지 알려 드리겠습니다. – Pripyat

+0

대단한 반응! :) 고마워. – Nick

+0

누구나이 작업을 수행하는 프로젝트가 있는데 파일 이름 비트가 확실하지 않습니다. 그림을 보내고 싶습니다 – Burf2000