繁体   English   中英

VPN服务。 数据包未通过隧道

[英]VPN Service. The packets are not passing through the tunnel

当代码在模拟器中执行时,以及当我启动服务并在浏览器应用程序中浏览网站时,它无法访问该网站,并向我显示ERR_NAME_NOT_RESOLVED

请告诉我问题出在哪里。

FileInputStream in = new FileInputStream(
   mInterface.getFileDescriptor());
FileOutputStream out = new FileOutputStream(
   mInterface.getFileDescriptor());
DatagramChannel tunnel = DatagramChannel.open();
tunnel.connect(new InetSocketAddress("127.0.0.1", 8087));
Log.e("Localhost:",InetAddress.getLocalHost().toString());
protect(tunnel.socket());
Log.e("MyVpnJavaClass", "protected tunnel");
ByteBuffer packet = ByteBuffer.allocate(32767);
Log.e("MyVpnJavaClass", "Byte Buffer packets");
int timer = 0;
Thread.sleep(100);

上面的代码在LOGCAT显示到“ BYTE BUFFER PACKETS”之前都可以正常工作。 但是在while循环中,它不会显示所有的LOGCAT消息。 请纠正我的问题

while(true) {
    Log.e("MyVpnJavaClass", "while is true");
    boolean idle = true;
    int length = in.read(packet.array());
    if (length > 0) {
    Log.e("MyVpnJavaClass", "Lenght is > 0");
    packet.limit(length);
    Log.e("MyVpnJavaClass", "LIMITING Lenght");
    DatagramPacket datagramPacket = new DatagramPacket(packet.array(),packet.array().length);
    byte[] dataInThePacket = datagramPacket.getData();

    System.out.println(DatagramSocketService.stringFromPacket(datagramPacket));
    Log.e("MyVpnJavaClass", "system");

    TCPPacket tcpPacket = new TCPPacket(0,packet.array());
    int sourcePort = tcpPacket.getSourcePort();
    String destAddress = tcpPacket.getDestinationAddress();
    int destPort = tcpPacket.getDestinationPort();

    Log.e("MyVpnJavaClass", "TCPPacket");
    datagramPacket.setSocketAddress(new InetSocketAddress("127.0.0.1", 8087));
    Log.e("MyVpnJavaClass", "datagram packet");

    UDPPacket udpPacket = new UDPPacket(0, packet.array());

    System.out.println("TCP Source port: " + );
    System.out.println("TCP Destination port: " + );
    System.out.println("TCP Destination address: " +);
    System.out.println("Length of data: " + );

    Log.e("MyVpnJavaClass", "System out commands");

    System.out.println(" ");

    System.out.println("UDPPacket destination address: " +);
    System.out.println("UDPPacket destination port: " +);
    System.out.println("IP Protocol: " + );
    System.out.println("Length of data: " + );
    Log.e("MyVpnJavaClass", "UDP Packets");

    tunnel.write(packet);
    packet.clear();
    Log.e("MyVpnJavaClass", "Write & Clear");

    idle = false;

    if (timer < 1) {
          timer = 1;
    }
}

尝试一次检查程序的一部分。 即使我正在从事类似的项目,也遇到类似的问题。 我尝试在in.read之后立即编写tunnel.write()并成功。 我搜寻了为什么会发生,但没有得到任何答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM