我想通過GameKit
發送一些NSData
而不是Bluetooth
。通過GameKit發送和接收NSData
雖然我設置了GameKit
並且能夠發送小消息,但我現在想要擴展併發送整個文件。
我一直在閱讀,你必須將大文件拆分成數據包,然後再單獨發送它們。
所以我決定創建一個struct
,使其更容易對數據包進行解碼,當他們在另一端會根據收到:
typedef struct {
const char *fileName;
NSData *contents;
int fileType;
int packetnumber;
int totalpackets;
} file_packet;
然而,對於小文件(8KB和更小)我想一個包就足夠了。
因此,對於一個包,我想我應該能夠創建一個file_packet,設置其屬性,並通過-sendDataToAllPeers發送:withDataMode:錯誤:
NSData *fileData;
file_packet *packet = (file_packet *)malloc(sizeof(file_packet));
packet->fileName = [filename cStringUsingEncoding:NSASCIIStringEncoding];
packet->contents = [NSData dataWithContentsOfFile:selectedFilePath];
packet->packetnumber = 1;
packet->totalpackets = 1;
packet->fileType = 56; //txt document
fileData = [NSData dataWithBytes:(const void *)packet length:sizeof(file_packet)];
free(packet);
NSError *error = nil;
[self.connectionSession sendDataToAllPeers:fileData withDataMode:GKSendDataReliable error:&error];
if (error) {
NSLog(@"An error occurred: %@", [error localizedDescription]);
}
不過,我不認爲有什麼地方右鍵設置fileData - 和error
什麼都不顯示。
當一個文件的接收,我請執行下列操作:
file_packet *recievedPacket = (file_packet *)malloc(sizeof(file_packet));
recievedPacket = (file_packet *)[data bytes];
NSLog(@"packetNumber = %d", recievedPacket->packetnumber);
...
然而,在控制檯上輸出爲packetNumber = 0
,甚至當我設置包編號爲1
我缺少明顯的? 我對NSData
或GameKit
瞭解不多。
所以我的問題是 - 我可以在NSData
中添加一個file_packet
,如果是這樣,我該如何成功 - 以及如何將文件分成多個數據包?
感謝您的回答,但是在測試之後,它似乎崩潰了(EXC_BAD_ACCESS)。不知道如何實現它,因爲我這樣做的方式不起作用 – 2011-01-30 08:58:19