package logicface; import component.ComponentException; import component.Identifier; import encoding.*; import mgmt.MgmtException; import org.junit.Test; import packet.Interest; import packet.MINPacket; import packet.PacketException; import util.ByteHelper; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.*; import java.util.Arrays; /* * @Author: Wang Feng * @Description: * @Version: 1.0.0 * @Date: 16:26 2021/5/10 * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 */ public class LogicFaceTest { /** * 测试初始化&UDP发包 */ @Test public void testIniUdp() throws LogicFaceException, ComponentException { Interest interest=new Interest(); interest.ttl.setTtl(Long.MAX_VALUE); byte[] value={(byte)132,(byte)221,(byte)223,(byte)25}; interest.payload.setValue(value); interest.congestionMark.setCongestionLevel(Long.MAX_VALUE); Identifier name=new Identifier("/pkusz/wefree"); interest.setName(name); LogicFace face=new LogicFace(); face.initWithUdp("127.0.0.1",50000); face.sendInterest(interest); } /** * 测试初始化&TCP发包 */ @Test public void testIniTcp() throws LogicFaceException, ComponentException { Interest interest=new Interest(); interest.ttl.setTtl(Long.MAX_VALUE); byte[] value={(byte)132,(byte)221,(byte)223,(byte)25}; interest.payload.setValue(value); interest.congestionMark.setCongestionLevel(Long.MAX_VALUE); Identifier name=new Identifier("/pkusz/wefree"); interest.setName(name); LogicFace face=new LogicFace(); face.initWithTcp("127.0.0.1",60000); face.sendInterest(interest); } @Test public void testReceiveInterestByTcp() throws ComponentException, LogicFaceException, EncoderException, BlockException, MgmtException, PacketException { Interest interest=new Interest(); interest.ttl.setTtl(Long.MAX_VALUE); byte[] value={(byte)132,(byte)221,(byte)223,(byte)25}; interest.payload.setValue(value); interest.congestionMark.setCongestionLevel(Long.MAX_VALUE); Identifier name=new Identifier("/pkusz/wefree"); interest.setName(name); LogicFace face=new LogicFace(); face.initWithTcp("127.0.0.1",60000); face.sendInterest(interest); // 等待两秒钟,接收兴趣包 try { Interest newInterest = face.receiveInterest(-1); System.out.println(Arrays.toString( new SelfEncodingBase().selfWireEncode(newInterest).getRaw())); }catch (Exception e){ System.out.println("超时未收到数据:"+e.getLocalizedMessage()); } } @Test public void testReceiveMinPacketByTcp() throws ComponentException, LogicFaceException, EncoderException, BlockException, MgmtException, PacketException { // MINPacket minPacket=new MINPacket(); // minPacket.packetType=new VlInt(TLV.TlvPacketMINCommon); //// minPacket // // LogicFace face=new LogicFace(); // face.initWithTcp("127.0.0.1",60000); // face.sendInterest(interest); // // // 等待两秒钟,接收兴趣包 // try { // Interest newInterest = face.receiveInterest(-1); // System.out.println(Arrays.toString( // new SelfEncodingBase().selfWireEncode(newInterest).getRaw())); // }catch (Exception e){ // System.out.println("超时未收到数据:"+e.getMessage()); // } } /** * 开启一个tcp服务器,端口号为60000 */ @Test public void startTCPServer() { ServerSocket socket = null; OutputStream outputStream = null; try { //建立基站 socket = new ServerSocket(60000); //开始开启接收模式,接到后返回客户端的socket对象 Socket client = socket.accept(); byte[] bytes = new byte[1500]; // 循环接收数据,并打印 InputStream inputStream = client.getInputStream(); int len = inputStream.read(bytes); // inputStream.close(); System.out.println(Arrays.toString(ByteHelper.getLenBytes(bytes, 0, len))); //获取向客户端发送消息的对象流 outputStream = client.getOutputStream(); //向客户端写数据 outputStream.write(ByteHelper.getLenBytes(bytes, 0, len)); System.out.println("writed to client: "+Arrays.toString(ByteHelper.getLenBytes(bytes, 0, len))); Thread.sleep(20000); inputStream.close(); outputStream.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 创建一个UDPServer,从而打印出来udp face发送的数据。端口号为50000 * 测试结果: * [-15, 0, -6, 25, -52, 4, 4, 5, 6, 7, -15, 0, -5, 15, -15, 0, -4, 1, 1, -15, 0, -3, 1, 1, -15, 0, -2, 1, 0] */ // @Test public void startUDPServer() throws IOException { //1.创建服务端+端口 DatagramSocket server = new DatagramSocket(50000); //2.准备接受容器 byte[] container = new byte[1024]; //3.封装成包 DatagramPacket packet = new DatagramPacket(container, container.length); while(true){ //4.接受数据 server.receive(packet); //5.分析数据 byte[] data = packet.getData(); int len = packet.getLength(); System.out.println("server receive:" + Arrays.toString(ByteHelper.getLenBytes(data, 0, len))); SocketAddress remoteHost=packet.getSocketAddress(); System.out.println("remote host: "+packet.getSocketAddress()); server.connect(remoteHost); server.send(packet); } //6.释放 // server.close(); } }