知识点将来跳槽用iOS Developer

使用UDP方式 与iOS端App通讯

2017-07-20  本文已影响582人  夏天然后
  • 首先需要安装一个TCP&UDP测试工具
创建连接

接下来为减少代码的键入, 我直接使用CocoaAsyncSocket这个三方库,作为中间媒介完成整个过程

{
      GCDAsyncUdpSocket *udpSocket; // 定义一个socket的对象 签订代理 GCDAsyncUdpSocketDelegate
}

麦 2017/7/20 17:05:40
    /*************** UDP ***********************/
    udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
    NSError *error = nil;
    // 绑定端口
    [udpSocket bindToPort:8888 error:&error];
    // 启用广播
    [udpSocket enableBroadcast:YES error:&error];
    
    if (error) {
        [SVProgressHUD showErrorWithStatus:@"启用失败"];
    }else {
        NSLog(@"%@", [udpSocket localHost]);
        // 开始接收消息
        [udpSocket beginReceiving:&error];

    }
    /*************** UDP ***********************/

#pragma mark - GCDAsyncUdpSocketDelegate
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(nullable id)filterContext {

    NSLog(@"success");
    NSString *ip = [GCDAsyncUdpSocket hostFromAddress:address];
    NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"收到响应 %@ %@", ip, s);
    [sock receiveOnce:nil];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        uint16_t port = 9999;
        [self sendBackToHost:ip port:port withMessage:s];
    });
}
- (void)sendBackToHost:(NSString *)ip port:(uint16_t)port withMessage:(NSString *)s{
    // 回一个 hello summerxx too
    char *str = "hello summerxx too" ;
    NSData *data = [NSData dataWithBytes:str length:strlen(str)];
    [udpSocket sendData:data toHost:ip port:port withTimeout:0.1 tag:200];
}
收到信息 发回一条信息

注 如果是多个Socket对象 在回调中可以用目标端口进行区分获取数据即可
sock.localPort 来取得目标端口.

上一篇 下一篇

猜你喜欢

热点阅读