比如A,B双方进行UDP通讯,A发生一段数据到B时:
1.这段数据要么完整到达B,要么在传输过程中丢失,根本到达不了B
2.这段数据可能完整到达B,或者不完整到达B(部分缺失或错误),或者丢失了,根本到达不了B1和2哪个正确?如果这段数据很小呢(比如100个字节)?如果小数据满足1的话,那么这个"小"到底是多少字节?谢谢各位帮忙!!!
谢谢!
谢谢!
1.这段数据要么完整到达B,要么在传输过程中丢失,根本到达不了B
2.这段数据可能完整到达B,或者不完整到达B(部分缺失或错误),或者丢失了,根本到达不了B1和2哪个正确?如果这段数据很小呢(比如100个字节)?如果小数据满足1的话,那么这个"小"到底是多少字节?谢谢各位帮忙!!!
谢谢!
谢谢!
你可以在程序的时候在UDP协议之上再自定义一个包头,包头中记录数据长度和校验和,接收到数据后自己判断是否完整。
我查了一下UDP资料,UDP头中包含源端口、目的端口、包长度和校验和,既然包含包长度和校验和就说明UDP协议可以判断包的完整性,会自动抛弃不完整的数据包,所以只要你接收到就是完整的。
一個 UDP 包,要麼到達,要麼就丟失,大小是就是自己的 數據長度 + UDP 頭 + IP 頭 + 以太網頭一個 UDP 的最大分片是 1640 (好象是),一般情況 UDP 的最大用戶包為 64K還有一種情況,就是有一個比較大的 UDP 包到達。你去接收時, recvform 給的緩沖區不夠。
這時只會讀到這個包的前面的數據,返回 SOCKET_ERROR, 用 WSAGetLastError 可以讀到緩沖不夠的錯誤。但這個包就廢了