使用gcdasyncsocket通过wifi发送和接收键/值对

时间:2017-03-23 05:22:57

标签: ios objective-c macos gcdasyncsocket nsoutputstream

我制作了一个iOS应用程序,它从BLE信标接收RSSI值,并通过wifi发送(使用GCDAsynSocket)到连接的MacBook。我在MacBook上的下一个应用程序接收RSSI值并以.txt格式保存(使用NSOutpuStream类)。 现在,我需要从八个不同的BLE信标发送RSSI值,并在键/值对中发送它们各自的MAC地址。 我尝试使用NSKeyedArchiver将NSDictionary编码为NSData。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject: NSDictionaryContaningKeyValuePair];

在接收器端(MacBook),我使用NSUnarchiver进行解码。我无法提取包含键/值(MAC地址/ RSSI值)对的NSDictionary并将其存储到.txt文件中。此外,由于NSoutputStrteam写入方法采用非空的const uint8_t值,如何在.txt文件中写入键/值对? 我使用Objective-C和Xcode(7.0)。

谢谢。

1 个答案:

答案 0 :(得分:0)

得到了解决方案。可以使用NSJSONSerialization类发送NSDictionary。在发射器端(iOS):

NSDictionary* dictInfo = [NSDictionary dictionaryWithObjectsAndKeys:self.txtInfo.text,@"data", nil];
NSData* dataDict = [NSJSONSerialization dataWithJSONObject:dictInfo options:NSJSONWritingPrettyPrinted error:nil];
[self.socket writeData:dataDict withTimeout:-1.0f tag:0];

在接收方端(MacBook):

 if ([self getSelectedSocket]== sock) {
    [_dataBuffer appendData:data];
    if ([sock socketAvailableBytes] == 0) {
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:_dataBuffer options:NSJSONReadingMutableLeaves error:nil];
        DLog("Dictionary Info: %@", dict);
        NSString* strInfo =  (NSString*)[dict objectForKey:@"data"];
        [_dataBuffer setLength:0];
        self.txtLogs.stringValue= strInfo;

有关详细信息,请访问https://github.com/boobalaninfo/Bonjour-iOS-MAC-Apps