使用GameKit一段時間我發現每發送一個約90k的限制,所以如果你的文件大於90k,你將不得不分解它。這裏是我建議你打破上去:
月1日 - 發送你的文件的名稱
NSData* fileNameData = [fileNameStr dataUsingEncoding: NSASCIIStringEncoding];
// send 'fileNameData'
2日 - 發送塊的數目您要發送
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];
3rd - 接收大塊數據
NSMutableData data = [[NSMutableData alloc]init];
for (NSUInteger i=0; i<chunkCount;i++){
// Receive data
[data appendData:receivedData];
}
如果一切正常, t現在您將擁有包含文件名的fileNameStr
對象和包含文件內容的data
對象。
希望這有助於 - AYAL
感謝AYAL爲您詳細的答覆,我會很快走出檢查你的代碼,讓你知道如何去。 – Pripyat 2010-05-31 20:29:12
很好的迴應! :) 非常感謝。 – Nick 2010-10-14 13:38:17
有沒有人有這樣做的項目,只是不知道文件名位。我想發送圖片 – Burf2000 2011-07-10 18:34:30