使用UDP方式 与iOS端App通讯

来源:互联网 发布:windows bat日期加减 编辑:程序博客网 时间:2024/06/05 15:50
  • 首先需要安装一个TCP&UDP测试工具
  • 连接类型选择UDP
  • 目标IP 设置手机的IP, 端口8888 (这个端口在App端用来绑定)
  • 指定端口, 是App向回发信息所需要的端口, 具体设置如下图所示

创建连接

接下来为减少代码的键入, 我直接使用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];}

收到信息

发回一条信息