java UDP编程

来源:百度知道 编辑:UC知道 时间:2024/06/28 07:30:08
请教高手:
在JAVA中,用DatagramSocket发送一个DatagramPacket数据报时。数据包会因数据太大而在网络中被分割成多个小的包,从而造成局部乱序或丢失吗?(注意,是发送一个DatagramPacket).
比如:DatagramPacket的包大小设为2048个字节,在接收方是正确的接收到整个数据包或完全接受不到,还是有可能接收到部分数据啊?
急切需要高手指点迷津!!!

UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。

与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。

相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突法性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。例如,一个位于客户端的应用程序向服务器发出了以下4个数据报

D1

D22

D333

D4444

但是UDP有可能按照以下顺序将所接收的数据提交到服务端的应用:

D333

D1

D4444

D22

事实上,UDP协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生。

可能会出现丢包的现象,也就是部分收不到,但是不会造成局部乱序,因为分成小包的时候会给一个偏移量的,我记着计算机网络里是这样讲的~~