2011-12-02 76 views
0

我試圖使用UDP實現簡單的數據傳輸。我有一個校驗和問題,給定一個包含數據的數據包,我應該如何實現校驗和?還有任何想法如何實現超時,因此它會觸發重傳?由於UDP可靠的數據服務實現

+0

到目前爲止你做了什麼?以及爲什麼你在這種情況下選擇TCP over 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!