From 69d77d95740f4e20c4b50c62fe82235d0108600a Mon Sep 17 00:00:00 2001 From: free will <2647778488@qq.com> Date: Thu, 13 May 2021 20:56:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=B7=B2=E7=9F=A5=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E6=97=B6=E9=97=B4=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84?= =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E5=8F=8A=E8=A7=A3=E5=86=B3=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E6=9C=89=E5=BE=85=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/others/UDPReceiveDemo.java | 119 ++++++++++++++++++----- src/test/java/others/UDPSendDemo.java | 102 +++++++++++++++---- 2 files changed, 176 insertions(+), 45 deletions(-) diff --git a/src/test/java/others/UDPReceiveDemo.java b/src/test/java/others/UDPReceiveDemo.java index cdd0b72..cfce438 100644 --- a/src/test/java/others/UDPReceiveDemo.java +++ b/src/test/java/others/UDPReceiveDemo.java @@ -1,8 +1,10 @@ package others; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; +import util.ByteHelper; + +import java.io.IOException; +import java.net.*; +import java.util.Arrays; /* * @Author: Wang Feng @@ -12,32 +14,97 @@ import java.net.InetAddress; * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 */ public class UDPReceiveDemo { - public static void main(String[] args) { - DatagramSocket socket = null; - try { - socket = new DatagramSocket(12345);//建立基站 - byte[] buf = new byte[1024]; - DatagramPacket packet = new DatagramPacket(buf, buf.length);//建立机房 - socket.receive(packet);//开始接受数据 - - //获取对方的主机信息 - InetAddress address = packet.getAddress(); - System.out.println(address.getHostAddress()); - //获取数据内容 + public static void main(String[] args) throws IOException { + while(true){ + //1.创建服务端+端口 + DatagramSocket server = new DatagramSocket(12345); + //2.准备接受容器 + byte[] container = new byte[1024]; + //3.封装成包 + DatagramPacket packet = new DatagramPacket(container, container.length); + //4.接受数据 + server.receive(packet); + //5.分析数据 byte[] data = packet.getData(); - System.out.println("数据内容:" + new String(data, 0, packet.getLength())); - //获取数据长度 - int length = packet.getLength(); - System.out.println("数据长度:" + length); + int len = packet.getLength(); + System.out.println("server receive:" + + Arrays.toString(ByteHelper.getLenBytes(data, 0, len))); - //获取接收端口号 - int port = packet.getPort(); - System.out.println("接收端口号是:" + port); + SocketAddress remoteHost=packet.getSocketAddress(); + System.out.println("remote host: "+packet.getSocketAddress()); - } catch (Exception e) { - e.printStackTrace(); - } finally { - socket.close(); + // 睡眠5s + try { + System.out.println("start 5s sleeping ... "); + Thread.sleep(5000); + System.out.println("After 5s, wake up now!"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + // 做数据应答 + server.connect(remoteHost); + server.send(packet); + System.out.println("server send:" + + Arrays.toString(ByteHelper.getLenBytes(data, 0, len))); + + // 睡眠5s + try { + System.out.println("start 5s sleeping ... "); + Thread.sleep(5000); + System.out.println("After 5s, wake up now!"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + // 做数据应答 + server.connect(remoteHost); + server.send(packet); + System.out.println("server send:" + + Arrays.toString(ByteHelper.getLenBytes(data, 0, len))); + + // 睡眠5s + try { + System.out.println("start 5s sleeping ... "); + Thread.sleep(5000); + System.out.println("After 5s, wake up now!"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + // 做数据应答 + server.connect(remoteHost); + server.send(packet); + System.out.println("server send:" + + Arrays.toString(ByteHelper.getLenBytes(data, 0, len))); + + //6.释放 + server.close(); } } +// public static void main(String[] args) { +// DatagramSocket socket = null; +// try { +// socket = new DatagramSocket(12345);//建立基站 +// byte[] buf = new byte[1024]; +// DatagramPacket packet = new DatagramPacket(buf, buf.length);//建立机房 +// socket.receive(packet);//开始接受数据 +// +// //获取对方的主机信息 +// InetAddress address = packet.getAddress(); +// System.out.println(address.getHostAddress()); +// //获取数据内容 +// byte[] data = packet.getData(); +// System.out.println("数据内容:" + new String(data, 0, packet.getLength())); +// //获取数据长度 +// int length = packet.getLength(); +// System.out.println("数据长度:" + length); +// +// //获取接收端口号 +// int port = packet.getPort(); +// System.out.println("接收端口号是:" + port); +// +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// socket.close(); +// } +// } } diff --git a/src/test/java/others/UDPSendDemo.java b/src/test/java/others/UDPSendDemo.java index 02652b9..e7a6f46 100644 --- a/src/test/java/others/UDPSendDemo.java +++ b/src/test/java/others/UDPSendDemo.java @@ -1,8 +1,10 @@ package others; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; +import java.io.IOException; +import java.net.*; +import java.nio.ByteBuffer; +import java.nio.channels.DatagramChannel; +import java.util.Arrays; /* * @Author: Wang Feng @@ -12,24 +14,86 @@ import java.net.InetAddress; * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 */ public class UDPSendDemo { + // 测试使用channel收发数据,并测试探索setsotime方法的使用方法 + public static void main(String[] args) throws IOException { + // 初始化channel + DatagramChannel channel=DatagramChannel.open(); + SocketAddress remoteAddress=new InetSocketAddress("localhost",12345); + channel.socket().connect(remoteAddress); - public static void main(String[] args) { - DatagramSocket socket = null; + // 发送数据 + byte[] sendData=new byte[]{0x1,0x2,0x3,0x4,0x9,0x8,0x7,0x6}; + channel.write(ByteBuffer.wrap(sendData)); + System.out.println("发送数据:"+Arrays.toString(sendData)); + + // 设置读写超时时间 + channel.socket().setSoTimeout(6000); + + // 另一种方式接收数据 + byte[] receiveData=new byte[1000]; + DatagramPacket newP=new DatagramPacket(receiveData,1000); + channel.socket().receive(newP); + System.out.println("收到应答DatagramPacket1: "+Arrays.toString(newP.getData())); + + // 设置读写超时时间 + channel.socket().setSoTimeout(2000); + + // 另一种方式接收数据 + receiveData=new byte[1000]; + newP=new DatagramPacket(receiveData,1000); try { - //建立基站 - socket = new DatagramSocket(); - byte[] buf = "hello,UDP".getBytes(); - InetAddress address; - address = InetAddress.getByName("localhost"); - //建立仓库 - DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 12345); - //发送数据 - socket.send(packet); - } catch (Exception e) { - e.printStackTrace(); - } finally { - //关闭基站 - socket.close(); + channel.socket().receive(newP); + System.out.println("收到应答DatagramPacket2: " + Arrays.toString(newP.getData())); + }catch (IOException e){ + System.out.println("由于超时读取而报错:"+e.getMessage()); } + + // 设置读写超时时间 + channel.socket().setSoTimeout(4000); + + // 另一种方式接收数据 + receiveData=new byte[1000]; + newP=new DatagramPacket(receiveData,1000); + channel.socket().receive(newP); + System.out.println("收到应答DatagramPacket3: "+Arrays.toString(newP.getData())); + + //接收数据 +// byte[] receiveData=new byte[1000]; +// int len=channel.read(ByteBuffer.wrap(receiveData)); +// byte[] realData=new byte[len]; +// System.arraycopy(receiveData,0,realData,0,len); +// System.out.println("收到应答1:"+ Arrays.toString(realData)); +// +// //接收数据 +// receiveData=new byte[1000]; +// len=channel.read(ByteBuffer.wrap(receiveData)); +// realData=new byte[len]; +// System.arraycopy(receiveData,0,realData,0,len); +// System.out.println("收到应答2:"+ Arrays.toString(realData)); } + +// public static void main(String[] args) { +// DatagramSocket socket = null; +// try { +// //建立基站 +// socket = new DatagramSocket(); +// byte[] buf = "hello,UDP".getBytes(); +// InetAddress address; +// address = InetAddress.getByName("localhost"); +// //建立仓库 +// DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 12345); +// //发送数据 +// socket.send(packet); +// // 设置超时读写时间 +// socket.setSoTimeout(2000); +// // 读取数据 +// DatagramPacket newPacket; +// socket.receive(packet); +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// //关闭基站 +// socket.close(); +// } +// } }