今天我们就来介绍一下基于UDP协议下的发送和接收信息的Java小程序(测试用例)。
说起UDP 协议,大家肯定能立马想到TCP协议,的确,当下来讲,两者是相对来说较为主流的,但是二者又存在着区别,所以今天写两篇博客来简单记叙一下自己的所学,如有不当,请大家批评指正。
二者的区别和联系大家可以点击查看【网络协议】TCP/IP协议与UDP协议的区别。
我们在这里只作简单概述,在我看来,最大的区别就在于是否需要建立联系,UDP是将数据打包抛出,接收方根据相应端口进行接收,而TCP则需要建立连接,当然,没有端口也建立不了连接,那是否说明两者就是不同的呢?当然不是,UDP正是因为他无需建立连接,所以可以直接把数据扔出去,谁想要谁要,安全性是不高的,但是实现起来倒是相对来说简单一些的,下面我们就来看一下基于UDP的数据传输。
在这里我们主要从发送方和接收方来分析实现原理:
发送方:
1、用到Socket(套接字),创建发送端Socket对象
2、创建数据并打包
3、发送数据
4、释放资源
记下来我们直接看代码的实现过程:
package com.zzxtit.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
*author 秦飞阳
*/
public class SendDemo {
public static void main(String[] args) throws IOException{
// 1、用到Socket(套接字),创建发送端Socket对象
DatagramSocket ds = new DatagramSocket();
// 2、创建数据并打包
String s = "hello hdp";
byte[] bys = s.getBytes();
int length = bys.length;
InetAddress address = InetAddress.getByName("manxiaoyu");
int port = 8888 ;
DatagramPacket dp = new DatagramPacket(bys, length,address,port);
// 3、发送数据
ds.send(dp);
// 4、释放资源
ds.close();
}
}
接收方:
1、创建接收端Socket对象
2、接收数据
3、解析资源
4、输出数据
5、释放资源
同样我们再用代码进行实现:
package com.zzxtit.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
*author 秦飞阳
*/
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// 1、创建接收端Socket对象
DatagramSocket ds = new DatagramSocket(8888);
// 2、接收数据
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys,bys.length);
ds.receive(dp);
// 3、解析资源
InetAddress address = dp.getAddress();
byte[] data = dp.getData();
int length = dp.getLength();
// 4、输出数据
System.out.println(address.getHostAddress());
System.out.println(new String(data));
// 5、释放资源
ds.close();
}
}
因为这个相对来说比较简单,所以不做过多的解释,在最后总结几点注意事项:
1、端口号错误,可以正常发出数据,但是却无法接收
2、重复运行会导致cannot bind 的错误,这是因为上次运行的端口号正在使用,无法让当前程序使用此端口号
3、创建的Socket对象是由DatagramSocket这个类完成的,这是UDP和TCP所不同的一点所在
4、注意端口号的使用与系统程序或软件程序的端口号冲突