mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-06-18 06:00:25 +08:00
测试已知超时时间不生效的原因及解决方法,有待修复
This commit is contained in:
@@ -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();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user