UDP:以数据为中心 非面向连接 不安全 数据可能丢失 效率高
一、类 DatagramSocket DatagramPacket
1、客户端:
1)、创建客户端 DatagramSocket 类 +指定端口
2)、准备数据 字节数组
3)、打包 DatagramPacket +服务器地址 及端口
4)、发送(服务器没打开,客户端也可以发送,不会报错,数据丢失)
5)、释放资源
2、服务器端:
1)、创建 服务端 DatagramSocket 类 +指定端口
2)、准备接受容器 字节数组 封装 DatagramPacket
3)、包 接受数据
4)、分析
5)、释放资源
// Client端:
package com.bjsxt.net.udp;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 客户端
* 1、创建客户端 +端口
* 2、准备数据 double -->字节数组 字节数组输出流
* 3、打包(发送的地点 及端口)
* 4、发送
* 5、释放
*
*
* @author Administrator
*
*/
public class Client {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1、创建客户端 +端口
DatagramSocket client = new DatagramSocket(6666);
//2、准备数据
double num =89.12;
byte[] data =convert(num);
//3、打包(发送的地点 及端口) DatagramPacket(byte[] buf, int length, InetAddress
address, int port)
DatagramPacket packet = new DatagramPacket(data,data.length,new InetSocketAddress
("localhost",8888));
//4、发送
client.send(packet);
//5、释放
client.close();
}
/**
* 字节数组 数据源 +Data 输出流
* @param num
* @return
* @throws IOException
*/
public static byte[] convert(double num) throws IOException{
byte[] data =null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos =new DataOutputStream(bos);
dos.writeDouble(num);
dos.flush();
//获取数据
data = bos.toByteArray();
dos.close();
return data;
}
}
//Server端
package com.bjsxt.net.udp;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 服务端
* 1、创建服务端 +端口
* 2、准备接受容器
* 3、封装成 包
* 4、接受数据
* 5、分析数据 字节数组-->double
* 6、释放
* @author Administrator
*
*/
public class Server {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1、创建服务端 +端口
DatagramSocket server = new DatagramSocket(8888);
//2、准备接受容器
byte[] container = new byte[1024];
//3、封装成 包 DatagramPacket(byte[] buf, int length)
DatagramPacket packet =new DatagramPacket(container, container.length) ;
//4、接受数据
server.receive(packet);
//5、分析数据
double data =convert(packet.getData());
System.out.println(data);
//6、释放
server.close();
}
/**
* 字节数组 +Data 输入流
* @param data
* @return
* @throws IOException
*/
public static double convert(byte[] data) throws IOException{
DataInputStream dis =new DataInputStream(new ByteArrayInputStream(data));
double num =dis.readDouble();
dis.close();
return num;
}
}
package com.bjsxt.net.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 客户端
* 1、创建客户端 +端口
* 2、准备数据
* 3、打包(发送的地点 及端口)
* 4、发送
* 5、释放
*
* 思考: 89.12 数据+类型
* @author Administrator
*
*/
public class MyClient {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1、创建客户端 +端口
DatagramSocket client = new DatagramSocket(6666);
//2、准备数据
String msg ="udp编程";
byte[] data =msg.getBytes();
//3、打包(发送的地点 及端口) DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket packet = new DatagramPacket(data,data.length,new InetSocketAddress("localhost",8888));
//4、发送
client.send(packet);
//5、释放
client.close();
}
}
package com.bjsxt.net.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 服务端
* 1、创建服务端 +端口
* 2、准备接受容器
* 3、封装成 包
* 4、接受数据
* 5、分析数据
* 6、释放
* @author Administrator
*
*/
public class MyServer {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1、创建服务端 +端口
DatagramSocket server = new DatagramSocket(8888);
//2、准备接受容器
byte[] container = new byte[1024];
//3、封装成 包 DatagramPacket(byte[] buf, int length)
DatagramPacket packet =new DatagramPacket(container, container.length) ;
//4、接受数据
server.receive(packet);
//5、分析数据
byte[] data =packet.getData();
int len =packet.getLength();
System.out.println(new String(data,0,len));
//6、释放
server.close();
}
}