UDP
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
UDP:主要学两个类:DatagramSocket DatagramPacket
DatagramSocket表示用来发送和接收数据报包的套接字,套接字就是两台机器之间通信的端点,数据报套接字是包投递服务的发送或接收点,就是寄快递和收快递的点。构造方法为:
DatagramSocket(int port) :创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramPacket此类表示数据报包,数据报包用来实现无连接包投递服务。也就是包着东西的快递盒子。构造方法:
DatagramPacket(byte[] buf, int length, SocketAddress address) :构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
DatagramPacket(byte[] buf, int length, InetAddress address, int port) :构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
- 客户端:
1) 创建客户端 DatagramSocket 类 + 指定的发送端口
2) 准备数据 以字节数组的形式
3) 打包 DatagramPacket+服务器端的地址和端口
4) 发送
5) 释放资源 - 服务器端
1) 创建服务端 DatagramSocket 类 + 指定的接收端口
2) 准备接收数据的容器 以字节数组的形式封装为DatagramPacket
3) 包 接收数据
4) 分析
5) 释放资源
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 2、服务器端
* 1) 创建服务端 DatagramSocket 类 + 指定的接收端口
* 2) 准备接收数据的容器 以字节数组的形式封装为DatagramPacket
* 3) 包 接收数据
* 4) 分析
* 5) 释放资源
* @author Administrator
*
*/
public class MyServer {
public static void main(String[] args) throws IOException {
DatagramSocket sever = new DatagramSocket(8888);
byte[] b = new byte[1024];
DatagramPacket data = new DatagramPacket(b, b.length);
sever.receive(data);
// System.out.println(new String(b,0,b.length));
System.out.println(convert(b));
sever.close();
}
public static double convert(byte[] b) throws IOException{
ByteArrayInputStream s = new ByteArrayInputStream(b);
DataInputStream dis = new DataInputStream(s);
double num = dis.readDouble();
dis.close();
return num;
}
}
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、客户端:
* 1) 创建客户端 DatagramSocket 类 + 指定的发送端口
* 2) 准备数据 以字节数组的形式
* 3) 打包 DatagramPacket+服务器端的地址和端口
* 4) 发送
* 5) 释放资源
* @author Administrator
*
*/
public class MyClient {
public static void main(String[] args) throws IOException {
DatagramSocket client = new DatagramSocket(6666);
// String msg = "lf is god!!";
// byte[] b = msg.getBytes();
double num = 88.88;
byte[] b = convert(num);
DatagramPacket data = new DatagramPacket(b, b.length, new InetSocketAddress("127.0.0.1",8888));
client.send(data);
client.close();
}
public static byte[] convert(double num) throws IOException{
ByteArrayOutputStream s = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(s);
dos.writeDouble(num);
dos.flush();
byte[] b = s.toByteArray();
dos.close();
return b;
}
}