1

次のコードを使用して、UDP メッセージをサーバーに送信することに成功しています。

GCDAsyncUdpSocket *udpSocket; 
    udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSData *data = [@"initialize" dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:@"127.0.0.1" port:5000 withTimeout:-1 tag:1]; 

サーバーがこのメッセージを受信すると、一連の応答で応答します。どうすればそれらをキャッチして処理できますか? アプリが送信メッセージを送信したのと同じポートでサーバー応答をリッスンし、2 分間初期化メッセージを無限ループで繰り返すようにします。

message -> listen -> message -> listen ...
4

1 に答える 1

1

私はそれを自分で理解することができました-結局難しくはありませんでした:-)

バックグラウンドでのリスニングを開始するために、私は単にこれを使用しました:

NSError *error = nil;

    if (![udpSocket bindToPort:0 error:&error])
    {
        NSLog(@"Error binding: %@", [error description]);
        return;
    }
    if (![udpSocket beginReceiving:&error])
    {
        NSLog(@"Error receiving: %@", [error description]);
        return;
    }

初期化を繰り返し送信するために、上記のコードを含むタイマー initlilzieServer を使用しました):

timer = [NSTimer scheduledTimerWithTimeInterval:150
                                         target:self
                                         selector:@selector(initializeServer)
                                         userInfo:nil
                                         repeats:YES];

そして、このクラスで応答の処理を行います。

- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext
{
NSString *msg = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    if (msg)
    {
        NSLog(@"%@",msg);

    }
    else
    {
        NSString *host = nil;
        uint16_t port = 0;
        [GCDAsyncUdpSocket getHost:&host port:&port fromAddress:address];

        NSLog(@"Unknown Message: %@:%hu", host, port);
    }
}
于 2012-11-21T11:21:47.267 に答える