diff --git a/javaSE-day11/src/com/inmind/udp02/UdpClientDemo03.java b/javaSE-day11/src/com/inmind/udp02/UdpClientDemo03.java new file mode 100644 index 0000000..768a142 --- /dev/null +++ b/javaSE-day11/src/com/inmind/udp02/UdpClientDemo03.java @@ -0,0 +1,33 @@ +package com.inmind.udp02; + +import java.io.IOException; +import java.net.*; +import java.util.Scanner; + +//需求:使用UDP实现快速通信,实现多发多收 +public class UdpClientDemo03 { + public static void main(String[] args) throws IOException { + //创建客户端对象 + DatagramSocket client = new DatagramSocket();//随机分配端口的客户端 + //增加一个scanner对象,手动输入要发送的数据 + Scanner sc = new Scanner(System.in); + //不停地输入,不停地发,当输入exit就停止 + while (true) { + System.out.println("请输入要发送的内容:"); + String msg = sc.nextLine(); + //判断是否是结束消息 + if ("exit".equals(msg)) { + System.out.println("谢谢使用,退出成功!!"); + client.close(); + break; + } + + //创建出数据包对象,封装要发送出去的数据 + byte[] bytes = msg.getBytes(); + DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 10023); + //客户端发送出去 + client.send(packet); + + } + } +} diff --git a/javaSE-day11/src/com/inmind/udp02/UdpServerDemo02.java b/javaSE-day11/src/com/inmind/udp02/UdpServerDemo02.java new file mode 100644 index 0000000..2a00882 --- /dev/null +++ b/javaSE-day11/src/com/inmind/udp02/UdpServerDemo02.java @@ -0,0 +1,47 @@ +package com.inmind.udp02; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; + +/* +作为UDP服务端,接收客户端发送的数据 + +在java中使用DatagramSocket来表示UDP的客户端和服务端 +构造方法 +DatagramSocket(int port) 创建服务端的Socket对象,并指定端口号。 + +常用方法: +void receive(DatagramPacket p) 使用数据包接收数据 + +DatagramPacket :数据包 +DatagramPacket(byte[] buf, int length) 创建接收数据的数据包对象 +int getLength() 返回要发送的数据的长度或接收到的数据的长度 + +需求:创建服务器,接收客户端的数据 + */ +public class UdpServerDemo02 { + public static void main(String[] args) throws IOException { + System.out.println("服务器启动了"); + //1.创建服务器端对象 + DatagramSocket server = new DatagramSocket(10022); + + //2.创建出一个数据包对象,用来接收数据(接飞饼) + //DatagramPacket(byte[] buf, int length) 创建接收数据的数据包对象 + byte[] buf = new byte[1024 * 64];//用来接收数据,最大64KB + DatagramPacket packet = new DatagramPacket(buf, buf.length); + + //3.服务器开始正式使用数据包,接收客户端发来的数据 + server.receive(packet);//阻塞方法 + + //4.从数据包中获取字节数据,并展示(接收多少个字节,就打印多少数据) + int length = packet.getLength();//数据的长度 + //字节数据转为字符串展示 + String result = new String(buf, 0, length); + //获取数据包的ip和端口 + System.out.println(packet.getPort()); + System.out.println(packet.getAddress().getHostAddress()); + System.out.println(result); + server.close(); + } +} diff --git a/javaSE-day11/src/com/inmind/udp02/UdpServerDemo03.java b/javaSE-day11/src/com/inmind/udp02/UdpServerDemo03.java index eed4010..f6690a8 100644 --- a/javaSE-day11/src/com/inmind/udp02/UdpServerDemo03.java +++ b/javaSE-day11/src/com/inmind/udp02/UdpServerDemo03.java @@ -5,44 +5,28 @@ import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; -/* -作为UDP服务端,接收客户端发送的数据 - -在java中使用DatagramSocket来表示UDP的客户端和服务端 -构造方法 -DatagramSocket(int port) 创建服务端的Socket对象,并指定端口号。 - -常用方法: -void receive(DatagramPacket p) 使用数据包接收数据 - -DatagramPacket :数据包 -DatagramPacket(byte[] buf, int length) 创建接收数据的数据包对象 -int getLength() 返回要发送的数据的长度或接收到的数据的长度 - -需求:创建服务器,接收客户端的数据 - */ +//创建服务器端,不停地接收 public class UdpServerDemo03 { public static void main(String[] args) throws IOException { - System.out.println("服务器启动了"); - //1.创建服务器端对象 - DatagramSocket server = new DatagramSocket(10022); + System.out.println("服务器启动"); - //2.创建出一个数据包对象,用来接收数据(接飞饼) - //DatagramPacket(byte[] buf, int length) 创建接收数据的数据包对象 - byte[] buf = new byte[1024 * 64];//用来接收数据,最大64KB - DatagramPacket packet = new DatagramPacket(buf, buf.length); + //创建服务端对象 + DatagramSocket server = new DatagramSocket(10023); - //3.服务器开始正式使用数据包,接收客户端发来的数据 - server.receive(packet);//阻塞方法 + byte[] buf = new byte[1024 * 64]; + while (true) { + //创建一个数据包对象不停地接收数据到数组中 + DatagramPacket packet = new DatagramPacket(buf, buf.length); - //4.从数据包中获取字节数据,并展示(接收多少个字节,就打印多少数据) - int length = packet.getLength();//数据的长度 - //字节数据转为字符串展示 - String result = new String(buf, 0, length); - //获取数据包的ip和端口 - System.out.println(packet.getPort()); - System.out.println(packet.getAddress().getHostAddress()); - System.out.println(result); - server.close(); + //服务接收数据包 + server.receive(packet); + //获取数据 + int length = packet.getLength(); + System.out.println(packet.getAddress().getHostAddress()); + System.out.println(packet.getPort()); + System.out.println(new String(buf,0,length)); + } + +// server.close(); } }