TCP/IP协议和UDP协议的区别
TCP/IP协议是一种面向流的全双工通信协议,有着服务器客户端的概念,必须保证通信双方建立稳定安全的连接才能
够进行数据传输;UDP协议不是一种基于稳定连接的协议,是一种面向数据报包的通信协议,不需要通信双方建立稳的
连接, 所以UDP不需要获取输入输出流,且不用建立连接,可以直接指定主机地址和端口然后发送
发送端
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();
}
}
我们发送数据需要创建一个DatagramSoket
,然后再创建一个DatagramPacket(包裹)
, 将内容放入包裹
中,使用DatagramSoket
中的send(包裹)
这个方法就能发送数据了
接收方
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);
//接收数据到数据报包中
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);
}
}
对于接收方我们接收数据也需要创建一个DatagramSoket
只不过需要指定一个端口
, 使端口开放才能接收数据,然后也需要创建DatagramPacket
只不过空包里面只用放一个空的字节数组
,收数据时需要使用DatagramSocket中的receive()
方法,在这之后, 空的字节数组就有内容了
注意: 启动顺序是先开启接收方再开启发送方,因为UDP协议是面向数据包的通信,只负责发送到位,如果接收方端口没有开启则无法接收数据,所以运行顺序是先开启接收方后开启发送方