iOS UDP通讯双向

时间:2014-11-04 10:02:16

标签: ios sockets

我正在制作一个应该使用UDP协议进行通信的iOS应用程序(这些设备连接到同一个Wi-Fi网络)。我设法创建了一个套接字,并将一些数据发送到指定的IP地址:

const char *ip = "192.168.1.100";

- (void)initNetworkCommunication {

    cfSocket = CFSocketCreate(kCFAllocatorDefault, AF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, NULL, NULL);

    if ( cfSocket == NULL) {
        NSLog(@"CfSocketCreate failed");
    }else{
        if( cfSocket ) {
            NSLog(@"Socket created ");

            struct sockaddr_in addr;
            memset(&addr, 0, sizeof(addr));
            addr.sin_len = sizeof(addr);
            addr.sin_family = AF_INET;
            addr.sin_port = htons(1470); //port
            inet_pton(AF_INET,ip, &addr.sin_addr); //ip adress

            CFDataRef addrData = CFDataCreate(NULL, (const UInt8*)&addr, sizeof(addr));
            CFSocketSetAddress (cfSocket, addrData);
            char message []= "UDP test message";

            CFDataRef Data = CFDataCreate(NULL, (const UInt8*)message, sizeof(message));
            CFSocketSendData(cfSocket,addrData, Data, 0);
        }
    }

我认为这很有效,因为设备会收到消息。问题是我真的不知道从哪里开始监听/接收数据。我试图寻求一些帮助,但遗憾的是没有任何有用的结果。大多数人都在使用外部库,我想避免使用它们。如果有人能在这个主题上给我一些指导,我会非常感激。

1 个答案:

答案 0 :(得分:0)

今天早上我又搜索了一些,实际上找到了我在这个主题中寻找的内容:

UDP broadcast using CFSocket on IOS

向套接字添加回调以及配置RunLoop就像魅力一样:)如果你想从回调中获取数据,只需使用以下内容:

NSData * someData = (NSData*)data;
NSString * someString = [[NSString alloc] initWithData:someData encoding:NSASCIIStringEncoding];

希望这有助于某人。