2. UDP通信程序
2.1 UDP通信原理
UDP是一种不可靠的网络协议,他在通信的两端各建立一个Socket对象,但是这两个Socket只是发送、接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务端的概念
Java提供了DatagramSocket类作为基于UDP协议的Socket
2.2 UDP发送数据
发送数据的对象
- 创建发送端的Socket对象(DatagramSocket)
- 创建数据,并把数据打包
- 调用DatagramSocket对象的方法发送数据
- 关闭发送端
相关代码
package StudyDemo03;
import java.io.*;
import java.net.*;
public class SendDemo {
public static void UDPsend() throws IOException {
DatagramSocket ds = new DatagramSocket();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while((line = br.readLine()) != null) {
DatagramPacket dp = new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("192.168.1.100"), 10086);
//将数据打包,参数为字符串的字节码,字符串长度,本机地址,端口号
ds.send(dp); //调用send发送数据
if(line.equals("88")) break;
}
ds.close();
}
public static void main(String[] args) {
try {
UDPsend();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
2.3 UDP接受数据
接收数据的对象
- 创建接收端的Socket对象(DatagramSocket)
- 创建一个数据包,用于接收数据
- 调用DatagramSocket对象的方法接受数据
- 解析数据包,并把数据在控制台显示
- 关闭接收端
相关代码
package StudyDemo03;
import java.io.*;
import java.net.*;
public class ReceiveDemo {
public static void UDPreceive() throws IOException {
DatagramSocket ds = new DatagramSocket(10086);
byte[] bys = new byte[1024];
while(true) {
DatagramPacket dp = new DatagramPacket(bys, bys.length); //建立一个包用于接收数据
ds.receive(dp);
System.out.println(new String(dp.getData(), 0, dp.getLength()));
if(new String(dp.getData(), 0, dp.getLength()).equals("88")) break;
}
ds.close();
}
public static void main(String[] args) {
try {
UDPreceive();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}