测试已知超时时间不生效的原因及解决方法,有待修复

This commit is contained in:
free will
2021-05-13 20:56:11 +08:00
parent e8e8bd5639
commit 69d77d9574
2 changed files with 176 additions and 45 deletions
+93 -26
View File
@@ -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();
// }
// }
}
+83 -19
View File
@@ -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();
// }
// }
}