RYShearDeviceUDPManager.m 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //
  2. // ShearDeviceUDPManager.m
  3. // VclustersGemini
  4. //
  5. // Copyright © 2021 APPLE. All rights reserved.
  6. //
  7. #import "RYShearDeviceUDPManager.h"
  8. #import "GCDAsyncUdpSocket.h"
  9. static RYShearDeviceUDPManager *shareInstance = nil;
  10. @interface RYShearDeviceUDPManager()<GCDAsyncUdpSocketDelegate>{
  11. GCDAsyncUdpSocket *updSocket;
  12. GCDAsyncUdpSocket *serverSocket;
  13. BOOL isInShearch;
  14. }
  15. @end
  16. @implementation RYShearDeviceUDPManager
  17. + (instancetype)shareInstance {
  18. static dispatch_once_t onceToken;
  19. dispatch_once(&onceToken, ^{
  20. shareInstance = [[RYShearDeviceUDPManager alloc] init];
  21. });
  22. return shareInstance;
  23. }
  24. - (void)startShearchDevice{
  25. updSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
  26. serverSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
  27. NSError *error = nil;
  28. [updSocket bindToPort:10000 error:&error];/*绑定端口*/
  29. [updSocket enableBroadcast:YES error:&error];
  30. [serverSocket bindToPort:10001 error:&error];
  31. [serverSocket enableBroadcast:YES error:&error];
  32. if (error){
  33. HLog(@"\n---error--%@-",error);
  34. }else{
  35. // [updSocket beginReceiving:&error];
  36. [serverSocket beginReceiving:&error];
  37. }
  38. }
  39. - (void)broadcast{
  40. NSString *str = @"getIpAddress";
  41. NSData *data = [str dataUsingEncoding:(NSUTF8StringEncoding)];
  42. NSString *host = @"255.255.255.255";
  43. [updSocket sendData:data toHost:host port:10000 withTimeout:-1 tag:100];
  44. HLog(@"\n----广播-%@---%@--",host,str);
  45. if (isInShearch){
  46. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  47. [self broadcast];
  48. });
  49. }
  50. }
  51. - (void)shearchDeviceLoop{
  52. isInShearch = YES;
  53. [self broadcast];
  54. }
  55. /**
  56. * 发送消息成功
  57. **/
  58. - (void)udpSocket:(GCDAsyncUdpSocket *)sock didSendDataWithTag:(long)tag{
  59. HLog(@"\n----广播发送成功--");
  60. }
  61. /**
  62. * 发送消息失败
  63. **/
  64. - (void)udpSocket:(GCDAsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error{
  65. ;
  66. }
  67. /**
  68. * 接受到消息
  69. **/
  70. - (void)udpSocket:(GCDAsyncUdpSocket *)sock
  71. didReceiveData:(NSData *)data
  72. fromAddress:(NSData *)address
  73. withFilterContext:(id)filterContext{
  74. NSString *ip = [GCDAsyncUdpSocket hostFromAddress:address];/*ip*/
  75. uint16_t port = [GCDAsyncUdpSocket portFromAddress:address];/*端口*/
  76. NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  77. if (port == 10001){/*设备端回复的消息*/
  78. isInShearch = NO;
  79. }
  80. }
  81. //- (void)backBroadcast{
  82. // NSString *str = @"1213456789087968543546789";
  83. // NSData *data = [str dataUsingEncoding:(NSUTF8StringEncoding)];
  84. // NSString *host = @"255.255.255.255";
  85. // [serverSocket sendData:data toHost:host port:10001 withTimeout:-1 tag:100];
  86. //}
  87. /**
  88. * 关闭
  89. **/
  90. - (void)udpSocketDidClose:(GCDAsyncUdpSocket *)sock withError:(NSError *)error{
  91. ;
  92. }
  93. @end