2016-04-11 14 views
0

Şu anda GCDAsyncUdpSocket kitaplığını kullanarak ve bir sunucuya UDP iletilerini başarıyla gönderiyorum, ancak 125 ileti gönderildiğinde, uygulama iletileri göndermeyi durdurur, ancak kilitlenmez veya herhangi bir hata atmaz.iOS uygulaması sadece 125 UDP mesajı gönderebilir mi?

Bir robot hareketini denetlemek için sürekli olarak ileti gönderiyorum diye bir sorun oluyorum.

İletileri gönderen görünümün .m dosyası İşte.

Her türlü yardım büyük beğeni topluyor.

#import "MovementVC.h" 
#import "GCDAsyncUdpSocket.h" 

@interface MovementVC() 

@end 

@implementation MovementVC 



- (void)viewDidLoad { 
    [super viewDidLoad]; 
    f, r, l, b = false; 
    timer = [NSTimer scheduledTimerWithTimeInterval: 0.1 target:self selector:@selector(targetMethod:) userInfo:nil repeats:YES]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)RightTouchDown:(id)sender { 
    r = true; 
} 

- (IBAction)RightTouchUpIn:(id)sender { 
    r = false; 
} 

- (IBAction)RightTouchUpOut:(id)sender { 
    r = false; 
} 


- (IBAction)ForwardTouchDown:(id)sender { 
    f = true; 
} 

- (IBAction)ForwardTouchUpIn:(id)sender { 
    f = false; 
} 

- (IBAction)ForwardTouchUpOut:(id)sender { 
    f = false; 
} 


- (IBAction)LeftTouchDown:(id)sender { 
    l = true; 
} 

- (IBAction)LeftTouchUpIn:(id)sender { 
    l = false; 
} 

- (IBAction)LeftTouchUpOut:(id)sender { 
    l = false; 
} 

- (IBAction)ReverseTouchDown:(id)sender { 
    b = true; 
} 

- (IBAction)ReverseTouchUpIn:(id)sender { 
    b = false; 
} 

- (IBAction)ReverseTouchUpOut:(id)sender { 
    b = false; 
} 


-(void) sendUDPMessage: (NSString*)messageToSend 
{ 
    GCDAsyncUdpSocket *udpSocket ; // create this first part as a global variable 
    udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 

    NSData *data = [messageToSend dataUsingEncoding:NSUTF8StringEncoding]; 

    [udpSocket sendData:data toHost:@"172.31.0.1" port:43211 withTimeout:-1 tag:1]; 
} 


-(void) targetMethod:(id)sender 
{ 
    if (r == TRUE) 
    { 
     [self sendUDPMessage: @"1"]; 
    } 
    else if (l == TRUE) 
    { 
     [self sendUDPMessage: @"11"]; 
    } 
    else if(f == TRUE) 
    { 
     [self sendUDPMessage: @"111"]; 
    } 
    else if (b == TRUE) 
    { 
     [self sendUDPMessage: @"1111"]; 
    } 
} 

@end 
+0

Mesajınızı gönderdikten sonra temizlemeniz gerektiğini düşünüyorum. Muhtemelen açık olan soketlerin sayısı üzerinde bir sınır var ve onları kapattığını göremiyorum. Bunu udpSocket: didSendDataWithTag: veya udpSocket: didNotSendDataWithTag: dueToError: temsilci yöntemlerinde yapın ve yuvayı kapattığınızdan emin olun. – dirkgroten

+0

Veya aynı soketi yeniden kullanın: Her defasında yeni bir tane ayırmak yerine, MovementVC'nizin bir @ mülkü haline getirerek soketi tekrar kullanılabilir hale getirin – dirkgroten

cevap

1

Sen ısrarla yeni yuva yapmak için UDP yuvasına bir işaretçi tutmak değil gerekir, 1 neredeyse her zaman yeterli olmalı.

İlgili konular