UDP的实现
Java中实现UDP协议的两个类,分别是DatagramPacket数据包类以及DatagramSocket套接字类。
其与TCP协议实现不同的是:
UDP的套接字DatagramSocket相比于Socket、ServerSocket来说,是一个非常简单的概念,没有连接的含义。套接字只需要知道侦听和发送数据包的本地端口即可。
也就是在TCP协议中庸Socket类和ServerSocket类进行功能划分,UDP协议中只用一个数据包套接字DatagramSocket发送和接受数据即可。
发送和接收数据、地址和端口都封装在数据包类DatagramPacket中。
发送端:
创建sockect 对象
准备数据,并将数据打包
发送
把数据转成字节数组
getByName 的好处是既可以传ip地址 还可以传主机名称
端口号由发送端决定 端口号由最大值 65536 ,1-1024的端口号不要用,是给系统准备的
数据打包
发送
接收端
创建接收端 socket 对象
接收数据
解析数据
打印数据
释放资源
线程阻塞 线程停留在这,不会继续向下运行
字节数组变字符串
下面是实现传输文件内容的UDP写法
传输端:
public void test() throws Exception {
DatagramSocket ds = new DatagramSocket();
//获取文件夹位置内容
File f = new File(“C:\360Downloads\Software\3.txt”);
//创建输入流
InputStream is = new FileInputStream(f);
String src="";
byte[] b = new byte[1024];
int len = 0;
//读书文件夹内容
while ((len = is.read(b)) != -1) {
src+=new String(b,0,len);
}
is.close();
//System.out.println(src);
byte[] bys = src.getBytes();
int length = bys.length;
InetAddress byName = InetAddress.getByName("192.168.0.128");
int port = 20086;
//创建传输对象
DatagramPacket dp = new DatagramPacket(bys, length, byName, port);
//传送
ds.send(dp);
ds.close();
}
接受端:
public void test() throws Exception {
//接受对象
DatagramSocket ds = new DatagramSocket(20086);
byte[] bys = new byte[1024];
int length = bys.length;
//获取对象内容
DatagramPacket dp = new DatagramPacket(bys, length);
//接受
ds.receive(dp);//线程阻塞
//转换内容
byte[] data = dp.getData();
String str = new String(data, 0, length);
//System.out.println(str);
//创建输出流并写入新创建文件夹
Writer w=new FileWriter("C:\\360Downloads\\Software\\6.txt");
w.write(str);
w.close();
}
复习到此为止。