ios - 如何在 IOS 中使用 UDP 广播进行网络发现

标签 ios objective-c

我想在 IOS 中使用 UDP 广播进行网络发现。我不知道该怎么做。你能给我一些建议吗?

我想这样做tutorial .

最佳答案

你可以使用 Cocoa 异步套接字

https://github.com/robbiehanson/CocoaAsyncSocket

下面是代码

    GCDAsyncUdpSocket *udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

    NSError *error = nil;

    if (![udpSocket enableReusePort:YES error:&error]) 
    {
        return;
    }

    if (![udpSocket bindToPort:8888 error:&error])
    {
        return;
    }
    if (![udpSocket beginReceiving:&error])
    {
        return;
    }

    error = nil;
    if(![udpSocket enableBroadcast:YES error:&error])
    {
    }

    NSData *data = [@"DISCOVER_FUIFSERVER_REQUEST" dataUsingEncoding:NSUTF8StringEncoding];
    [udpSocket sendData:data toHost:@“255.255.255.255” port:8888 withTimeout:10 tag:100];

下面是您将获得响应的委托(delegate)方法

- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
      fromAddress:(NSData *)address
withFilterContext:(id)filterContext
{
     NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

     NSString *msg1 = [NSString stringWithFormat:@"RECV: %@ FROM: %@", msg,[GCDAsyncUdpSocket hostFromAddress:address]];

    if([msg isEqualToString:@"DISCOVER_FUIFSERVER_RESPONSE"])
    {
    }
}

如果在 udp 套接字连接时出现错误,将调用此委托(delegate)方法

- (void)udpSocketDidClose:(GCDAsyncUdpSocket *)sock withError:(NSError *)error
{
    if (error) {
        NSString *msg = [NSString stringWithFormat:@"RECV: error: %@", [error localizedDescription]];
    }
}

关于ios - 如何在 IOS 中使用 UDP 广播进行网络发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46926815/

相关文章:

ios - 使用 allowedExternalPlayback 禁用 Airplay 但音频仍在播放

ios - BLE Bond 表 iOS

ios - 如何使用 Firebase 跟踪 iOS 应用程序卸载/删除事件?

ios - 如何根据文本标签长度动态设置表格单元格高度?

ios - iOS 中的自定义按钮和状态

ios - 在两种不同类型的 UITableViewCells 之间交替

iphone - "Back"按钮没有出现在 UINavigationController 中

iphone - 如何以编程方式使声音变大?

ios - 所有这些自动布局更新方法之间有什么区别?都是必须的吗?

ios - PDKeychainBindingsController : how to reset items in keychain?