iOS从服务器接收udp响应

时间:2012-11-08 15:59:21

标签: ios iphone objective-c udp

我成功使用以下代码将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 ...

1 个答案:

答案 0 :(得分: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);
    }
}