您的位置:首页 > 理论基础 > 计算机网络

基于UDP的网络编程

2015-06-27 15:57 489 查看
UDP是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个连接之间并没有虚拟链路,这两个Socket只是接受发送数据的对象。

java提供了DatagramSocket对象作为基于UDP协议的Socket,使用DatagramPacket发送接收数据。

UDP主要用于实时性很强的场景比如网络游戏、视频会议

UDP协议是一种面向非连接的协议。面向非连接的协议指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。

对可靠性要求不高的应用。

1** 可以认为udp协议的socket类似于码头,数据报类似于集装箱;码头的作用是发送和接收集装箱,

而DatagramSocket作用则是发送、接受数据报。因此基于udp协议的通信双方没有所谓的客户端和服务器的概念。**1

udp和tcp协议简单比较如下:

*tcp协议:可靠,传输大小无限制,但是需要连接建立时间,差错控制大。

udp协议:不可靠,差错控制开销小,传输大小控制在 64kb以下,不需要建立连接。*

它的唯一作用就是接收和发送数据报。java使用DatagramPacket来代表数据报,datagrampacket的接收和发送都是通过datagramsocket来完成的。

当服务器端(也可以是客户端)接收到一个datagrampacket对象时,如果想向数据发送者“反馈”一些信息,但由于udp协议是面向非连接的,他也不知道是每个数据报由谁发过来,但程序可以调用datagrampacket的如下3个方法来获取发送者的ip地址和端口号。

->IntetAddress getAddress();当程序准备发送次数据包时,该方法返回数据报的目标ip地址;当程序刚接收到一个数据报时,该方法返回该数据报的发送数据报的发送主机的ip地址。

->int getPort();同理,自行脑部。

->SocketAddress getSocket(); SocketAddress里面封装了一个端口号和一个ip地址,解释同上。

简单的使用例子地址:https://github.com/happycodinggirl/TestUDPSocket.git

注:以上理论知识来源于《疯狂java讲义》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  udp 编程 socket