iOS蓝牙传输有时会获取不完整的数据

iOS蓝牙传输有时会获取不完整的数据,ios,iphone,objective-c,bluetooth,Ios,Iphone,Objective C,Bluetooth,当数据在很短的时间间隔内发送时,ios客户端会获取不完整的数据。但是,如果数据在足够长的时间间隔内发送到ios客户端,则没有问题。这是我的密码,有什么建议吗?谢谢:-) 有时,持续时间可能是一个问题,如果您的文件大于90k,则必须将其分解。以下是我建议你如何打破现状: 1st-发送文件名 NSData* fileNameData = [fileNameStr dataUsingEncoding: NSASCIIStringEncoding]; // send 'fileNameData' NS

当数据在很短的时间间隔内发送时,ios客户端会获取不完整的数据。但是,如果数据在足够长的时间间隔内发送到ios客户端,则没有问题。这是我的密码,有什么建议吗?谢谢:-)


有时,持续时间可能是一个问题,如果您的文件大于90k,则必须将其分解。以下是我建议你如何打破现状:

1st-发送文件名

NSData* fileNameData = [fileNameStr dataUsingEncoding: NSASCIIStringEncoding];
// send 'fileNameData'
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'  
}
// Receive data
NSString* fileNameStr = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding]
// Receive data
NSString* chunkCountStr = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding]
NSUInteger chunkCount = [chunkCount intValue];
2nd-发送您要发送的块数

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'
3rd-将您的NSData对象拆分并发送到一组每个小于50k的NSObject中(只是为了达到安全大小)

2nd-接收您将要接收的块数

NSData* fileNameData = [fileNameStr dataUsingEncoding: NSASCIIStringEncoding];
// send 'fileNameData'
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'  
}
// Receive data
NSString* fileNameStr = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding]
// 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];
}
NSMutableData=[[NSMutableData alloc]init];

对于(i=0;i),为了更好地了解您可以达到的速度,我建议您分析此图,它显示了作为连接间隔函数的可达到速度。iOS没有提供这样一个细粒度的控制,但此信息对于您的计算仍然很有价值

资料来源: