2011-12-02 42 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!