1.DatagramSocket
此类表示用来发送和接收数据报包的套接字。
| DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 |
void | send(DatagramPacket p) 从此套接字发送数据报包。 |
void | receive(DatagramPacket p) 从此套接字接收数据报包。当此方法返回时, DatagramPacket 的缓冲区填充了接收的数据。 |
2.DatagramPacket
此类表示数据报包。
|
|
UDP并无客户端和服务器端之分
示例一:
(1)“客户端”发送
byte buf[]="china".getBytes();
//构造数据报包,将长度为 length 的包发送到指定主机上的指定端口号。
DatagramPacket dp=new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",8888));
//从此端口发出
DatagramSocket ds=new DatagramSocket(6789);
//发送数据包
ds.send(dp);
ds.close();
(2)“服务器端”接收
byte [] buf=new byte[1024];
// 构造 DatagramPacket,用来接收长度为 length 的数据包。
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//从此端口接受
DatagramSocket ds=new DatagramSocket(8888);
//接受数据包
ds.receive(dp);
//还原
System.out.println(new String(buf,0,dp.getLength()));
示例2:发送一long类型数据
(1)“客户端”发送
//下面的程序为向服务器端发送一long类型数据
//先写入字节数组输出流---->再转换成字节数组
long l=1234567L;
/*
* ByteArrayOutputStream:此类实现了一个输出流,其中的数据被写入一个 byte 数组
*/
ByteArrayOutputStream baos=new ByteArrayOutputStream();
//创建一个新的数据输出流,将数据写入指定基础输出流。
DataOutputStream dos=new DataOutputStream(baos);
//将一个 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。
dos.writeLong(l);
//创建一个新分配的 byte 数组。
byte []buf= baos.toByteArray();
//打包
DatagramPacket dp=new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",8888));
DatagramSocket ds=new DatagramSocket(6789);
ds.send(dp);
ds.close();
(2)“服务器端”接收
//下面的程序为接受到long类型数据如何输出
byte []buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
DatagramSocket ds=new DatagramSocket(8888);
//接受
ds.receive(dp);
//创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
ByteArrayInputStream bais=new ByteArrayInputStream(buf);
DataInputStream dis=new DataInputStream(bais);
System.out.println(dis.readLong());