udp允许一个应用程序以架空的方式发送数据包并且它被用作一些重要的标准,比如dns和radius。尽管很多程序员不熟悉这个协议,因为对于程序来说它太难了,对于tcp来说它的使用的频率太低。但是,这个协议是非常值得我们去学习的,因为当你在没有创建tcp连接的时候,如果要在各程序之间以消息的形式改变数据,利用udp是最适合的。当这个消息很短并且你不需要传统上的连接的时候,udp将是最理想的协议。
udp的基本形式
udp以数据包的形式发送和接收数据。它和tcp不同的是,它没有连接的概念,每个数据包是单独的发送,并且没有发送的担保。当几个数据包被发送到相同的位置的时候,它们可以采用不同的顺序。如果你需要发送担保和分类担保,他们就必须有程序执行udp的最高协议,这个协议在udp的认证包,超时和中继,顺序包等等。或者你应该考虑使用tcp来代替。
和tcp一样,为了发送和接收数据包,你需要一个适当的网络插口,所以要java.net.datagrasocket 类。和tcp不同的是,客户插口和服务器插口没有区别,那就是说,一个datagramsocket可以在任何时候发送和接收数据。
datagramsocket虽然很方便,但是它的使用和机器的地址和端有关,这些取决于这个机器自己的构造器。这个关联决定了地址的来源和包传送的插口所在的端口,并且这个地址和插口的端口在接收数据时随时候命。
如果使用的电脑有多个ip地址,你可以将插口变为一个专用地址或者是通配符地址,专用地址是指电脑上所有的ip地址。在这种情况下插口会监听所有的即将到来的数据包,但是输出的数据包地址将由分界面决定,就是有连接电脑的路由器决定。
发送和接收数据
被发送或者接收数据是有java.net.datagrampacket 类来决定的。如果你要发送数据包,你必须使用datagrampacket包,设置你想发送包去的方位的端口和ip地址,并设置好数据的缓冲器。
在返回的时候, datagrampacket的数据缓冲器将作为一个参数通过,这个参数掌握了所有接收的数据。如果这个数据的大小大于缓冲器的大小,将把多余的字节删除,datagrampacke同样将包含发送者的地址和端口。
连接远端端口
udp的一个确定就是你必须在每个包上指定目的地的地址和端口。另外udp插口会从任何主机上接收包,这样使你无法控制所接受的数据。
但是,datagrampacket类提供了远程主机创建连接的概念,远程主机单一化的执行决定于udp。这个单一的特点由datagramsocket.connect()来执行,它用来连接插口到远程主机。
注意到连接通过过滤包裹发送和接收,那就是说,它并没有和远程主机建立一个真正的连接,所以,这个方法不象tcp,它自己不会发送任何数据包,也永远不会接受数据失败。
闽公网安备 35060202000074号