0

我正在使用 cocoaAsyncSocket。我从那里得到它。AsyncUdpSocket 对象仅在我初始化此对象时帮助我发送 IP 数据包。当我使用 [engineObject startSession] 调用其他控制器中的函数时,该函数正在工作,但 AsyncUdpSocket 对象不会发送任何 IP 数据包。它不会调用(或触发)委托方法:didSendDataWithTag 或 didNotSendDataWithTag .....

我做错了什么?

。H

#import <Foundation/Foundation.h>
#import "AsyncUdpSocket.h"

@interface Engine : NSObject{
    AsyncUdpSocket *asyncUdpSocket;
}
@property (atomic, strong) AsyncUdpSocket *asyncUdpSocket;
- (id) init;
- (BOOL) startSession;
- (void) doSomething;
@end

.m

@implementation Engine

- (id) init {
    [self doSomething];  //<-----<< It can send ip packet out

    self = [super init];

    [self doSomething];  //<-----<< It can send ip packet out, with wrong bind source port
    if (self){

    }
    return self;
}

- (BOOL) startSession{
    [self doSomething]; //<-----<< It won't send any ip packet out 
    [self oxox];
    return YES;
}

- (void) oxox{

    [self doSomething]; //<-----<< It won't send any ip packet out 

}

- (void) doSomething{
    NSError *socketError=nil;
    asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
    if (![asyncUdpSocket bindToPort:7701
                              error:&socketError]){
        NSLog(@"RASEngine:    Bind to Port fail");
    }
    [asyncUdpSocket enableBroadcast:NO error:&socketError];
    uint8_t signalBytes[] = {0x07, 0x07, 0x01, 0x06, 0x12, 0x34, 0x56, 0x78};
    NSData *signalData = [NSData dataWithBytes:signalBytes length:8];

    [asyncUdpSocket sendData:signalData   //<--------<< It is called every time, but doesn't send anything out.  
                      toHost:@"192.168.16.18"
                        port:9902
                 withTimeout:-1
                         tag:0];
}

#pragma mark -
#pragma mark AsyncUdpSocket Delegate for UDP
- (void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag{
    NSLog(@"UDP Engine:    onUdpSocket:didSendDataWithTag:%ld", tag);   
}


- (void)onUdpSocket:(AsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error{
    NSLog(@"UDP Engine:    onUdpSocket:didNotSendDataWithTag:%ld", tag);    
}

@end
4

1 回答 1

0

经过一周的战斗,我发现问题是由 RunLoop 引起的。我正在使用GCDAsyncUDPSocket替换AsynvUdpSocket,然后问题解决了!

GCDAsyncUdpSocket *gcdAsyncUdpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self
                                                                     delegateQueue:dispatch_get_main_queue()];
于 2013-08-20T05:41:31.590 回答