我成功使用以下代码将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 ...
答案 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);
}
}