Как непрерывно отправлять пакеты 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);
}