2011-12-02 2 views
0

Я пытаюсь реализовать простую передачу данных с использованием UDP. У меня проблема с контрольной суммой, учитывая пакет, содержащий данные, как мне реализовать контрольную сумму? также любая идея, как реализовать тайм-ауты, чтобы вызвать повторную передачу? БлагодаряUDP надежная реализация службы данных

+0

Что вы сделали до сих пор? и почему вы выбрали UDP через TCP в этом контексте? – nebula

ответ

0

Почему бы не попробовать надежный UDP см http://en.wikipedia.org/wiki/Reliable_User_Datagram_Protocol

Он имеет стандарт.

+0

Мне нужно проверить контрольную сумму пакета в передаче данных UDP. Я работаю в среде UDP, потому что таким образом мое приложение будет работать быстрее. – user1077036

+0

ОК, поскольку R-UDP НЕ является действительно стандартной спецификацией. Вы можете добавить контрольную сумму. И вам небезразличны следующие функции ниже: Подтверждение полученных пакетов, Управление окнами и потоком, Повторная передача потерянных пакетов, Overbuffering? – Daniel

+0

Да, я забочусь о тех, но я уже справляюсь с этим. Мне нужен алгоритм контрольной суммы, который я могу встроить в свою систему. – user1077036

0
here's one approach for the internet checksum 

unsigned short checkSum() { 
    unsigned long sum = 0; 
    int i; 
    for(i=0; i < your packet length ; i++) { 
     sum += (your packet data[i] & 0xFFFF); 
    } 
    while (sum >> 16) { 
     sum = (sum & 0xFFFF) + (sum >> 16); 
    } 
    sum = ~sum;  
    return ((unsigned short) sum); 
} 

for the retransmission, you can set alarm to trigger timeout 
when packet is loss. you can do something using 
signal (SIGALRM, timeout function); 

Hope it helps! 
Смежные вопросы