TCP/IP协议是一种面向流的全双工通信协议,有着服务器客户端的概念,必须保证通信双方建立稳定安全的连接才能够进行数据传输;而UDP协议不是一种基于稳定连接的协议,是一种面向数据报包的通信协议,不需要通信双方建立稳定的连接,也没有所谓服务端和客户的概念,数据报包在传输的时候不保证一定及时到达,也不能保证数据报包的到达顺序,但是UDP协议传输效率要远高于TCP/IP,比如直播,视频会议。
DatagramSocket类是一个基于UDP通信协议的套接字,使用该类可以实现一个无连接的通信通道;需要实现在该通道通信,我们还需要另一个类的辅助:DatagramPacket(数据报包),该类用于将数据打包成数据报包,然后通过DatagramSocket完成数据报包的发送(send)与接收(receive)
消息发送方(Sender)
/**
* 发送方
* @author Jack Smith
*
*/
public class Sender {
public static void main(String[] args) throws IOException {
//创建一个数据报的网络通道
DatagramSocket ds = new DatagramSocket();
//准备需要传输的数据
String msg = "天大地大,老子最大!";
//将需要发送的数据打包成数据报包
DatagramPacket packet = new DatagramPacket(
msg.getBytes(), //需要被发送的数据的字节数组
msg.getBytes().length, //发送的数据长度(字节数组长度)
InetAddress.getByName("localhost"), //接收方的ip
1025 //接收方的端口
);
//发送数据报包
ds.send(packet);
//关闭通道
ds.close();
}
}
消息接收方(Receiver)
/**
* 接收方
* @author Jack Smith
*
*/
public class Receiver {
public static void main(String[] args) throws IOException {
//创建一个数据报的网络通道,绑定到指定端口
DatagramSocket ds = new DatagramSocket(1025);
//声明字节数组,用于存储接收的数据
byte[] b = new byte[1024];
//准备数据报包(空包)
DatagramPacket packet = new DatagramPacket(b, b.length);
//通过循环可以不断接收发送到当前地址和端口的数据报包
while(true) {
//接收数据到数据报包中
ds.receive(packet);
//接受到的数据(字节数组)实际长度
int len = packet.getLength();
//将字节数组转换为字符串
String s = new String(b, 0, len);
//获取发送方的ip地址
String ip = packet.getAddress().getHostAddress();
System.out.println("收到来自【"+ip+"】消息:"+s);
}
}
}
注:
导师指导下完成,如有雷同,那就是一个老师教的
代码有许多不足,欢迎留言讨论和更正