Я использую GCDAsyncUdpSocket
для записи сокета UDP в своем приложении. Сценарий такой: когда пользователь нажимает кнопку, он отправляет широковещательный пакет в локальную сеть, затем прослушивает ответ, в локальной сети есть сервер, который ответит одним UDP-пакетом. Когда приложение получит ответ, оно что-то сделает.
Я установил GCDAsyncUdpSocket
следующим образом:
- (void)setupSocket
{
_udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![_udpSocket bindToPort:18686 error:&error]) {
NSLog(@"Error binding: %@",error);
return;
}
if (![_udpSocket beginReceiving:&error]) {
NSLog(@"Error receiving: %@",error);
return;
}
if (![_udpSocket enableBroadcast:YES error:&error]) {
NSLog(@"Error enableBroadcast: %@",error);
return;
}
}
затем я отправляю пакет в действие кнопки следующим образом:
NSString *host = @"255.255.255.255";
int port = 8585;
NSString *msg = @"Hello from iOS";
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
[_udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:0];
in
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
fromAddress:(NSData *)address
withFilterContext:(id)filterContext
метод я слушаю порт, чтобы сделать что-то. Сначала он работает отлично, но если вы попытаетесь нажать кнопку позже (около 1 часа), то он больше не сможет отправить UDP-пакет.
Мой сервер в локальной сети распечатает полученные данные. Я думал, что что-то не так с методом отправки. поэтому я использую методы сокета BSD для отправки данных. и используйте GCDAsyncUdpSocket
для получения ответа. но то же самое произошло через некоторое время. на этот раз я могу отправить, но не могу получить.
Я что-то упустил о GCDAsyncUdpSocket
? почему он не может отправить/получить через некоторое время? Любая помощь приветствуется.