Как непрерывно отправлять пакеты udp с помощью GCDAsyncUdpSocket

Я использую GCDAsyncSocket для отправки изображений в моем приложении. Изображения большие, поэтому я разделил их данные на множество маленьких пакетов, которые сохраняются в NSMutablearray называется sort,

GCDAsyncUdpSocket *sendSocket;
sendSocket = [[GCDAsycUdpSocket alloc] initwithDelegate:self delegateQueue:dispatch_get_main_queue()];
for(int i = 0;i < sort.count; i++)
{ 
   [sendSocket sendData:[sort objectAtIndex:i toHost:@"239.1.1.110" port:46110 Timeout:-1 tag:1];
}

Но каждая отправка пакета слишком близка, большинство пакетов будет потеряно. Чтобы решить эту проблему, я добавляю следующую строку кода:

GCDAsyncUdpSocket *sendSocket;
sendSocket = [[GCDAsycUdpSocket alloc] initwithDelegate:self delegateQueue:dispatch_get_main_queue()];
for(int i = 0;i < sort.count; i++)
{ 
   [sendSocket sendData:[sort objectAtIndex:i toHost:@"239.1.1.110" port:46110 Timeout:-1 tag:1];
   [Thread sleepForTimeInterval:0.003f];
}

В результате, это делает мое приложение странным. Поэтому я хочу знать любой другой способ добавления timeInterval к ​​каждой отправке. Любая помощь приветствуется, большое спасибо заранее.

1 ответ

В GCDAsyncudpSocket.m используйте этот код

            if (socketError.code == ENOBUFS) {
                [self notifyDidNotSendDataWithTag:currentSend->tag   dueToError:[self errnoErrorWithReason:@"Buffer Full"]];
                [self endCurrentSend];
                [self maybeDequeueSend];
                usleep(10000);
            }
Другие вопросы по тегам