UDP发送数据
UDP通信原理:UDP协议是一种不可靠的网络协议,它在通信的两段各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象。因此对于 基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
Java提供了DatagramSocket类作为基于UDP协议的Socket
DatagramSocket类在java.net包下。该类是一个具体的类,继承了Object类,实现了Closeable接口
此类表示用于发送和接收数据报包的套接字
该类的常用构造方法是L:DatagramSocket() 构造一个数据报套接字并将其绑定到本地主机上的任何可用端口
该类的常用方法如下:
方法 | 作用 |
---|---|
close() | 关闭此数据报套接字,其实就是用来关闭发送端的 |
send(DatagramPacket p) | 从此套接字发送数据报包 |
DatagramPacket类,该类在java.net包下。该类被final修饰了,即该类是最终类。该类继承了Object类
该类表示数据报包
该类常用的构造方法如下:
x
DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造一个数据报包,用于将长度为length的数据包发到指定主机上的指定端口号
UDP发送数据的步骤如下 1、创建发送端的Socket对象,也就是通过无参构造方法创建DatagramSocket类的对象
xxxxxxxxxx
DatagramSocket()
2、创建数据,并把数据打包。也就是通过带4个参数的构造方法创建对象的
xxxxxxxxxx
DatagramPacket(bys,length,address,port)
3、调用DatagramSocket对象的send方法来发送数据
xxxxxxxxxx
void send(DatagramSocket p)
4、关闭发送端
void close
UDP发送数据的练习
xxxxxxxxxx
package ch22;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class a_6_1测试 {
public static void main(String[] args) throws IOException {
//1、创建发送端的Socket对象,也就是创建DatagramSocket的对象
DatagramSocket ds = new DatagramSocket();//DatagramSocket报红线,选中DatagramSocket,按Alt+Enter,抛出异常点击Add...
//2、创建数据,并把数据打包
//DatagramPacket(byte[] buf, int length, InetAddress address, int port) //这个构造方法需要3个参数
//构造一个数据报包,用于将长度为length的数据包发送到指定主机上的指定端口号
byte[] bys = "hello,udp,我来了".getBytes();//第1个参数
int length = bys.length;//第2个参数
InetAddress address = Inet4Address.getByName("10.99.20.3");//把数据发生到ip为10.99.20.3的主机上。第3个参数
int port = 20222;//端口号,它的取值范围是0~65535。第四个参数
//现在才是正式的创建数据包
DatagramPacket dp =new DatagramPacket(bys,length,address,port);//把上面的四个参数传进来
//3、调用DatagramSocket对象的方法来发送数据
ds.send(dp); //send报红线,选中send,按Alt+Enter,抛出异常点击Add...
//4、关闭发送端
ds.close();
//----------------------------------------------------------------------------------------------------------
//运行后,会发现控制台没有输出。原因:数据发送到端口是20222的地方去了,当然不会在控制台看到输出。解决:需要一个接收端
//接收端会在下一节课学习
}
}
UDP发送数据_优化写法
xxxxxxxxxx
package ch22;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class a_6_2测试_优化写法 {
public static void main(String[] args) throws IOException {
//1、创建发送端的Socket对象,也就是创建DatagramSocket的对象
DatagramSocket ds = new DatagramSocket();//DatagramSocket报红线,选中DatagramSocket,按Alt+Enter,抛出异常点击Add...
//2、创建数据,并把数据打包
//DatagramPacket(byte[] buf, int length, InetAddress address, int port) //这个构造方法需要3个参数
//构造一个数据报包,用于将长度为length的数据包发送到指定主机上的指定端口号
byte[] bys = "hello,udp,我来了".getBytes();//第1个参数
DatagramPacket dp =new DatagramPacket(bys,bys.length,Inet4Address.getByName("10.99.20.3"),20223);//把上面的四个参数传进来
//3、调用DatagramSocket对象的方法来发送数据
ds.send(dp); //send报红线,选中send,按Alt+Enter,抛出异常点击Add...
//4、关闭发送端
ds.close();
//----------------------------------------------------------------------------------------------------------
//运行后,会发现控制台没有输出。原因:数据发送到端口是20223的地方去了,当然不会在控制台看到输出。解决:需要一个接收端
//接收端会在下一节课学习
}
}