Ş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
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
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