UDP
- 表示用户数据报协议,是OSIcan草模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP开发中使用DatagramPacket包装一条要发送的信息,之后使用DatagramSocket完成发送操作.
DatagramPacket类
构造器:
- DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来接收长度为 length 的数据包。 - DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
常用方法:
- byte[] getData()
返回数据缓冲区。 - int getLength()
返回将要发送或接收到的数据的长度。
DatagramSocket类
构造方法:
-
DatagramSocket()
构造数据报套接字并将其绑定到本地主机上任何可用的端口。 -
void send(DatagramPacket p)
从此套接字发送数据报包。 -
void receive(DatagramPacket p)
从此套接字接收数据报包。 -
void close() 关闭网络连接
新建类UDPReceive
//接收端
public class UDPReceive {
//不警告
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException {
DatagramSocket ds = null;//定义接收数据报的对象
byte[] buf = new byte[1024];//开辟空间,以接收数据
DatagramPacket dp = null;//声明DatagramPacket对象
//需要抛出SocketException, 抛出此异常指示在底层协议中存在错误,如 TCP 错误。
ds = new DatagramSocket(8888);//客户端在8888端口上等待服务器发送信息
dp = new DatagramPacket(buf,1024);//使用buf保存信息
//需要抛出IOEXception
ds.receive(dp);//接收数据
String str = new String(dp.getData(),0,dp.getLength()) + "from" + dp.getAddress().getHostAddress() + " : " + dp.getPort();
System.out.println(str);//输出内容
}
}
新建类UDPSend
//发送端
public class UDPSend {
public static void main(String[] args) throws IOException {
DatagramSocket ds = null;//定义发送数据报的对象
DatagramPacket dp = null;//声明DatagramPacket对象
//需要抛出SocketExceptioin对象
ds = new DatagramSocket(9527);
String str = "你好,haungkun";
dp = new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName("localhost"),8888);//所用信息使用buf保存
System.out.println("发送信息");
ds.send(dp);//发送出去
ds.close();
}
}