UDP通信原理:
UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送、接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
JAVA提供了DatagramSocket类作为基于UDP协议的Socket。
UDP:发送端
1.创建发送端的Socket对象(DatagramSocket)
DatagramSocket()
2.创建数据,把数据打包
DtagramPacket(byte[] buf,int length,InetAddress address,int port)
3.调用DatagramSocket对象的方法发送数据
void send(DatagramPacket p)
4.代码部分
import java.io.IOException;
import java.net.*;
//DatagramSocket
/**
* 发送端:
* 1.准备DatagramSocket对象ds
* 2.准备DatagramPacket对象
* 3.调用ds中的send方法去发送
* 4.关闭socket
*/
public class Send {
public static void main(String[] args) throws IOException {
//1:
DatagramSocket ds = new DatagramSocket();
//2:
//2.1 byte[],存放发送的数据
//2.2 int,发送的数据长度
//2.3 InetAddress 接收方的IP地址
//2.4 int, 端口号
byte[] data = "hello,udp,我来了".getBytes();
InetAddress ip = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(data, data.length,ip,8888);
System.out.println("发送完毕");
//3.
ds.send(dp);
ds.close();
}
}
UDP:接收端
1.创建接收端的Socket对象(DatagramSocket)
DatagramSocket(int port)
2.创建一个数据包,用于接收数据
DatagramPacket(byte[] buf,int length)
3.调用DatagramSocket对象的方法接收数据
void receive(DatagramPacket p)
4.解析数据包,并把数据在控制台显示
byte[] getData()
int getLength()
5.关闭接收端
6.代码部分
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
* 接收端:
* 1.创建接受Socket(DatagramSocket)
* 2.创建接收的数据包,用来接收数据
* 3.调用ds中的接收方法来接收数据
* 4.解析数据包
*/
public class Receive {
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(8888);
DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
ds.receive(dp);
byte[] data = dp.getData();
InetAddress ip = dp.getAddress();
System.out.println("发送端的ip为:"+ip+"发送内容是:"+new String(data,0,dp.getLength()));
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果