UDP数据传输
非面向连接,不安全,数据可能丢失,效率高
1.例:传输一个字符串
服务器端
public void sever() throws Exception{
//1.创建服务端及端口
DatagramSocket server=new DatagramSocket(8888);
//2.准备接受容器 byte数组
byte[] container=new byte[1024];
//3.将接受容器打包
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();
}
客户端
public void client() throws Exception{
//1.创建客户端及端口
DatagramSocket client=new DatagramSocket(7777);
//2.准备数据
String sdata=new String("你好");
byte[] data=sdata.getBytes();
//3.打包数据
DatagramPacket packet=new DatagramPacket(data, data.length ,new InetSocketAddress("localhost", 8888));
//4.发送
client.send(packet);
//5.释放
client.close();
}
2.例:传输一个double数据
@Test
public void testClient() throws IOException {
DatagramSocket client=new DatagramSocket(7777);
double d=1.1;
byte[] data=convert(d);
DatagramPacket pack=new DatagramPacket(data, data.length,new InetSocketAddress("localhost",8888));
client.send(pack);
client.close();
}
/*
* 将double类型转化为字节数组:
* 用数据输出流将double输出到字节数组输出流中
* 再将字节数组输出流转化为字节数组
*/
public byte[] convert(double b) throws IOException {
byte[] data;
//写到流中----->选择输出流
ByteArrayOutputStream bos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(bos);
dos.writeDouble(b);
dos.flush();
data=bos.toByteArray();
dos.close();
return data;
}
@Test
public void testServer() throws IOException {
DatagramSocket server=new DatagramSocket(8888);
byte[] data=new byte[1024];
DatagramPacket pack=new DatagramPacket(data, 1024);
server.receive(pack);
double d=convert(pack.getData());
System.out.println(d);
}
/*
* 将字节数组---->double:
* 用字节数组初始化字节数组输入流
* 用数据输入流包裹字节数组输入流
* 从数据输入流中读出double
*/
public double convert(byte[] data) throws IOException {
double b;
//从流中读出来----->选择输入流
DataInputStream in=new DataInputStream(new ByteArrayInputStream(data));
b=in.readDouble();
return b;
}
*若服务器端没建好,直接运行客户端也不会报错.因为UDP是非面向连接的