网络编程之基于UDP协议的网络编程
2014-01-22 17:09
656 查看
UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送、接收数据报的对象,Java提供了DatagramSocket对象作为基于UDP协议的Socket,使用DatagramPacket代表DatagramSocket发送、接收的数据报。
1.UDP协议
UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议。它是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。至于对方是否可以接收到这些数据内容,UDP协议无法控制,因此UDP协议是一种不可靠的协议。
UDP适用于一次只传送少量数据、对可靠性要求不高的应用和环境。由于没有建立连接的过程,所以它的通信效率高。
使用UDP传输,需要发送端和接收端。
UDP特点:无连接的,不可靠的,数据报包小于等于64k,效率高。
2.DatagramSocket
Java使用DatagramSocket作为UDP通信的发送端和接收端的Socket,即DatagramSocket既可以发送数据,又可以接收数据。
构造器:
DatagramSocket():构造数据报套接字并将其绑定到本地主机上任何可用的端口。
DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口。
可以使用系统给定端口号,这时不需要参数,也可以自己指定端口号。因为是无连接的,所以不需要指定接收端的ip,而是在数据报包中指定。
方法:
void send(DatagramPacket p):从此套接字发送数据报包。
void receive(DatagramPacket p):从此套接字接收数据报包。
从这两个方法可以看出,使用DatagramSocket发送数据报时,DatagramSocket并不知道该数据报发送到哪,而是由DatagramPacket自身决定。
3.DatagramPacket
Java使用DatagramPacket代表数据报。
构造器:
DatagramPacket(byte[] buf, int length, InetAddress address, int port):发送时使用。构造数据报包,用来将长度为length偏移量为offset的包发送到指定主机上的指定端口号。
DatagramPacket(byte[] buf, int length):接收时使用。构造DatagramPacket,用来接收长度为length的数据包。
方法:
InetAddress getAddress():返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
int getPort():返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。
int getLength():返回将要发送或接收到的数据的长度。
byte[] getData():返回数据缓冲区。
4.步骤
4.1 发送
发送时的步骤一般如下:
1)建立UDP Socket,指定端口号。
2)创建数据报包并将数据封装。
3)发送数据报包。
4)关闭资源。
4.2 接收
接收时步骤一般如下:
1)建立UDP Socket,指定端口号。
2)创建数据报包,用于接收数据报。
3)使用数据报包接收数据。
4)取出数据。
5)关闭数据。
1.UDP协议
UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议。它是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。至于对方是否可以接收到这些数据内容,UDP协议无法控制,因此UDP协议是一种不可靠的协议。
UDP适用于一次只传送少量数据、对可靠性要求不高的应用和环境。由于没有建立连接的过程,所以它的通信效率高。
使用UDP传输,需要发送端和接收端。
UDP特点:无连接的,不可靠的,数据报包小于等于64k,效率高。
2.DatagramSocket
Java使用DatagramSocket作为UDP通信的发送端和接收端的Socket,即DatagramSocket既可以发送数据,又可以接收数据。
构造器:
DatagramSocket():构造数据报套接字并将其绑定到本地主机上任何可用的端口。
DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口。
可以使用系统给定端口号,这时不需要参数,也可以自己指定端口号。因为是无连接的,所以不需要指定接收端的ip,而是在数据报包中指定。
方法:
void send(DatagramPacket p):从此套接字发送数据报包。
void receive(DatagramPacket p):从此套接字接收数据报包。
从这两个方法可以看出,使用DatagramSocket发送数据报时,DatagramSocket并不知道该数据报发送到哪,而是由DatagramPacket自身决定。
3.DatagramPacket
Java使用DatagramPacket代表数据报。
构造器:
DatagramPacket(byte[] buf, int length, InetAddress address, int port):发送时使用。构造数据报包,用来将长度为length偏移量为offset的包发送到指定主机上的指定端口号。
DatagramPacket(byte[] buf, int length):接收时使用。构造DatagramPacket,用来接收长度为length的数据包。
方法:
InetAddress getAddress():返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
int getPort():返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。
int getLength():返回将要发送或接收到的数据的长度。
byte[] getData():返回数据缓冲区。
4.步骤
4.1 发送
发送时的步骤一般如下:
1)建立UDP Socket,指定端口号。
2)创建数据报包并将数据封装。
3)发送数据报包。
4)关闭资源。
public class UDPSend2 { public static void main(String[] args) throws Exception{ //1.建立UDP Socket,指定端口号 DatagramSocket socket = new DatagramSocket(1000); //2.创建数据报包并将数据封装 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line = bufr.readLine()) != null){ if("886".equals(line)) break; byte[] buf = line.getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.0.102"), 2000); //3.发送数据报包 socket.send(packet); } //4.关闭资源 socket.close(); } }
4.2 接收
接收时步骤一般如下:
1)建立UDP Socket,指定端口号。
2)创建数据报包,用于接收数据报。
3)使用数据报包接收数据。
4)取出数据。
5)关闭数据。
public class UDPRec2 { public static void main(String[] args) throws Exception{ //1.建立UDP Socket,指定端口号 DatagramSocket socket = new DatagramSocket(2000); while(true){ //2.创建数据报包,用于接收数据 byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); //3.使用数据报包接收数据 socket.receive(packet); //4.取出数据 String ip = packet.getAddress().getHostAddress(); int port = packet.getPort(); String data = new String(packet.getData(), 0 , packet.getLength()); System.out.println(ip + ":" + port + "-----" + data); } //关闭资源,可选 //socket.close(); } }
相关文章推荐
- 【转载】 基于UDP、TCP协议的C#网络编程
- Python3之基于UDP协议的网络编程
- java 中基于udp协议的网络编程的 net库包的相关类的用法
- [转贴]基于UDP、TCP协议的C#网络编程之一
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
- 基于UDP、TCP协议的C#网络编程之一
- linux网络编程之socket(十四):基于UDP协议的网络程序
- Java网络编程 - 基于UDP协议 实现简单的聊天室程序
- [转贴]基于UDP、TCP协议的C#网络编程之二
- 【转载】 基于UDP、TCP协议的C#网络编程
- java基于UDP协议的网络编程
- 基于UDP协议的网络编程
- 基于UDP协议的C#网络编程
- 使用Java网络编程创建基于UDP协议的Server和Client
- 3.Socket网络编程之基于UDP协议的Socket(图解与源码)
- 网络编程(5)—— 基于Linux系统的UDP协议socket服务器和客户端
- 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 [帧设计]
- linux网络编程之socket(十四):基于UDP协议的网络程序
- 网络编程应用:基于UDP协议【实现文件下载】--练习
- JAVA基础知识之网络编程——-基于UDP协议的通信例子