08Java网络编程-6. UDP协议发送与接收数据
原创
©著作权归作者所有:来自51CTO博客作者szlsay的原创作品,请联系作者获取转载授权,否则将追究法律责任
UDP发送数据
Java中的UDP通信
- UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
- Java提供了DatagramSocket类作为基于UDP协议的Socket
构造方法
方法名
| 说明
|
DatagramSocket()
| 创建数据报套接字并将其绑定到本机地址上的任何可用端口
|
DatagramPacket(byte[] buf,int len,InetAddressadd,int port)
| 创建数据包,发送长度为len的数据包到指定主机的指定端口
|
相关方法
方法名
| 说明
|
void send(DatagramPacket p)
| 发送数据报包
|
void close()
| 关闭数据报套接字
|
void receive(DatagramPacket p)
| 从此套接字接受数据报包
|
发送数据的步骤
- 创建发送端的Socket对象(DatagramSocket)
- 创建数据,并把数据打包
- 调用DatagramSocket对象的方法发送数据
- 关闭发送端
代码演示
public class SendDemo {
public static void main(String[] args) throws IOException {
//创建发送端的Socket对象(DatagramSocket)
// DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口
DatagramSocket ds = new DatagramSocket();
//创建数据,并把数据打包
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
byte[] bys = "hello,udp,我来了".getBytes();
// int length = bys.length;
// InetAddress address = InetAddress.getByName("192.168.1.66");
// int port = 10086;
// DatagramPacket dp = new DatagramPacket(bys,length,address,port);
DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.252.160"),10086);
//调用DatagramSocket对象的方法发送数据
//void send(DatagramPacket p) 从此套接字发送数据报包
ds.send(dp);
//关闭发送端
//void close() 关闭此数据报套接字
ds.close();
}
}
UDP接收数据
接收数据的步骤
- 创建接收端的Socket对象(DatagramSocket)
- 创建一个数据包,用于接收数据
- 调用DatagramSocket对象的方法接收数据
- 解析数据包,并把数据在控制台显示
- 关闭接收端
构造方法
方法名
| 说明
|
DatagramPacket(byte[] buf, int len)
| 创建一个DatagramPacket用于接收长度为len的数据包
|
相关方法
方法名
| 说明
|
byte[] getData()
| 返回数据缓冲区
|
int getLength()
| 返回要发送的数据的长度或接收的数据的长度
|
示例代码
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//创建接收端的Socket对象(DatagramSocket)
//DatagramSocket(int port) 构造数据报套接字并将其绑定到本地主机上的指定端口
DatagramSocket ds = new DatagramSocket(10086);
//创建一个数据包,用于接收数据
//DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket用于接收长度为 length数据包
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys,bys.length);
//调用DatagramSocket对象的方法接收数据
ds.receive(dp);
//解析数据包,并把数据在控制台显示
//byte[] getData() 返回数据缓冲区
// byte[] datas = dp.getData();
//int getLength() 返回要发送的数据的长度或接收到的数据的长度
// int len = dp.getLength();
// String dataString = new String(datas,0,len);
// System.out.println("数据是:" + dataString);
System.out.println("数据是:" + new String(dp.getData(),0,dp.getLength()));
//关闭接收端
ds.close();
}
}