iOS 飞屏功能的实现(UDPSocket协议广播机制)

飞屏,用手机播放电脑端视频的功能,一般常见于主打VR资源的影音类App。
大体思路:基于UDP协议的广播机制

电脑端不断发送udp广播,广播内容可精简为:端口号;
App用udpSocket扫描,得到对应端口号信息,解析出IP地址,拼接数据,请求数据。

移动端的实现:
1.导入第三方库:CocoaAsyncSocket,引用文件

#import <GCDAsyncUdpSocket.h>

2.遵守协议:
<GCDAsyncUdpSocketDelegate>
3.初始化对象,启动监听:
    _clientSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];   
    NSError * error = nil;
    [_clientSocket setIPv6Enabled:NO]; //每次扫描,你会收到两条信息,IPv4和IPv6的,根据需求做取舍。
    [_clientSocket bindToPort:8080error:&error];// 8080,与电脑端统一的端口号
     if (error) {
        PVRLog(@"clientSocket_error:%@",error);
     } else {
        [_clientSocket beginReceiving:&error];
        PVRLog(@"监听成功开始接收信息");
     }
4.代理回调
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext {

    NSString *sendMessage = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSString *ip = [GCDAsyncUdpSocket hostFromAddress:address];
    uint16_t port = [GCDAsyncUdpSocket portFromAddress:address];
    PVRLog(@"接收到%@的消息,\n解析到的数据[%@:%d]",sendMessage,ip,port);

}
- (void)udpSocketDidClose:(GCDAsyncUdpSocket *)sock withError:(NSError *)error {
    PVRLog(@"udpSocket关闭withError = %@", error);
}
关于如何使用封装好的工具类,请参考代码
GitHub:https://github.com/YZQ-Nine/FlyScreenDemo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值