需求:
1.UDP发送数据:数据来源于键盘录入,直到输入的数据是over,发送数据结束
2.UDP接收数据:不知道发送端什么时候停止发送,采用死循环方式
分析:
发送端:
1.创建发送端DatagramSocket对象
2.使用BufferedReader对象完成封装键盘录入数据并判断当数据不是over时正常发送,是over时结束发送
3.创建数据并打包
DatagramPacket(byte[] buf, int length, InetAddress address, int port)构造用于发送长度的分组的数据报包length`指定主机上到指定的端口号
4.调用DatagramSocket对象发送数据
5.关闭发送端
接收端:
1.创建接收端的Socket对象(DatagramSocket)要绑定指定的端口号
2.创建一个数据包,用于接收数据要注意数据包的长度
3.调用DatagramSocket对象的方法接收数据
4.解析数据包,并把数据在控制台显示
Demo
send发送端类
package Demo042001;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/*发送端
1.创建发送端DatagramSocket对象
2.使用BufferedReader对象完成封装键盘录入数据并判断当数据不是over时正常发送,是over时结束发送
3.创建数据并打包
DatagramPacket(byte[] buf, int length, InetAddress address, int port)` 构造用于发送长度的分组的数据报包 `length`指定主机上到指定的端口号
4.调用DatagramSocket对象发送数据
5.关闭发送端
* */
public class SendDemo {
public static void main(String[] args) throws IOException {
//创建发送端DatagramSocket对象
DatagramSocket ds=new DatagramSocket();
//2.使用BufferedReader对象完成封装键盘录入数据并判断当数据不是over时正常发送,是over时结束发送
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line=br.readLine())!=null){
if ("over".equals(line)){
break;
}
//创建数据并打包
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
// 构造用于发送长度的分组的数据报包 `length`指定主机上到指定的端口号
byte[] bytes=line.getBytes();
DatagramPacket dp=new DatagramPacket(bytes,bytes.length, InetAddress.getByName("cy"),12345);
ds.send(dp);
}
//关闭发送端
ds.close();
}
}
Recive接收端类
package Demo042001;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/*接收端
1.创建接收端的Socket对象(DatagramSocket)要绑定指定的端口号
2.创建一个数据包,用于接收数据要注意数据包的长度
3.调用DatagramSocket对象的方法接收数据
4.解析数据包,并把数据在控制台显示
* */
public class ReciveDemo {
public static void main(String[] args) throws IOException {
//创建接收端的Socket对象(DatagramSocket)要绑定指定的端口号
DatagramSocket ds = new DatagramSocket(12345);
while (true) {
//创建一个数据包,用于接收数据要注意数据包的长度
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
//调用DatagramSocket对象的方法接收数据
ds.receive(dp);
//解析数据包,并把数据在控制台显示
System.out.println("数据是:\r\n"+new String(dp.getData(),0,dp.getLength()));
}
}
}
浙公网安备 33010602011771号