UDP使用流程说明

(区别说明:iOS使用的GCDAsyncUdpSocket获取的UDP消息一次是一条,安卓的UDP消息是以列表的形式返回)

一,UDP 初始化

RCT_EXPORT_METHOD(initUDPWithPort:(NSString *)port callback:(RCTResponseSenderBlock)callback)

{

 

  Socket *socket = [Socket sharedInsance];

  socket.delegate = self;

  socket.delegateQueue = _methodQueue;

  NSError *error;

  [socket bindToPort:(uint16_t)port.intValue?(uint16_t)port.intValue:CLIENTPORT error:&error];

  if (error) {

      NSLog(@"客户端绑定失败");

      callback(@[@"UDP客户端绑定失败"]);

  } else {

      NSLog(@"客户端绑定成功");

      callback(@[@"UDP客户端绑定成功"]);

  }

  [socket beginReceiving:nil];

  

}

二,UDP 发送

#pragma mark - UDP 发送

- (void)sendUDPMessage:(NSString *)port wifiName:(NSString *)name wifiPassword:(NSString *)password

{

    NSDate *confromTimesp = [NSDate date];

    NSDateFormatter *dateFormat=[[NSDateFormatter alloc]init];

    [dateFormat setDateFormat:@"yyyyMMddHHmmss"];

    NSString* date=[dateFormat stringFromDate:confromTimesp];

    NSString* wifiName = [@"\"m3\"" stringByReplacingCharactersInRange:NSMakeRange(1, 2) withString:name];

    

    //同个局域网内,发送Wi-Fi信息

    NSDictionary *wifi = @{

      @"SSID": wifiName,//@"\"m3\""

      @"PWD": password,//@"chen9107jq"

      @"KeyType":@ "AES",

      @"AuthMode": @"WPA2PSK"

    };

    NSDictionary *data = @{

      @"type":@"SetDevWifiArg",

      @"data":wifi.mj_JSONString,

      @"result":@"req",

      @"date":date,

    };

    NSData *sendData = data.mj_JSONData;

    Socket *socket = [Socket sharedInsance];

    socket.delegate = self;

    socket.delegateQueue = _methodQueue;

    

    // 发送广播设置

    NSError *error;

    [socket enableBroadcast:YES error:&error];

    [socket sendData:sendData

              toHost:IPAddress

                port:(uint16_t)port.intValue?(uint16_t)port.intValue:SERVERPORT

         withTimeout:1000

                 tag:200];

}

三,UDP收到消息发送消息给RN(这里涉及原生发送通知给RN,参考《原生和RN之间的通知》)

-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext {

 

  [[EventEmitterManager manger]udpSocket:sock didReceiveData:data fromAddress:address withFilterContext:filterContext];

  

}

posted @ 2020-12-16 18:15  !superCode  阅读(609)  评论(0编辑  收藏  举报