我正在尝试使用setTrafficClass标记DSCP值。我在两台不同的计算机上设置了服务器和客户端,并且能够打印DSCP的值,但在WireShark中看不到它。
我在网上浏览了一些帖子,但没有任何帮助。我正在使用Windows 7专业版。
任何帮助,将不胜感激。谢谢!

我正在进行更多测试,以了解如何完成此操作。
这是客户端代码:

尝试{

        Socket socket = new Socket(addr, 2345);
        socket.setTrafficClass(10);

        PrintWriter out = new PrintWriter( socket.getOutputStream(), true);

        out.println("Current DSCP value: " + socket.getTrafficClass());
        out.close();
        socket.close();

    }

    catch (Exception e) {
        e.printStackTrace();
    }

}

服务器:
    try {
        ServerSocket serverSocket = new ServerSocket(1234);
        Socket clientSocket = serverSocket.accept();

        BufferedReader in = new BufferedReader(new InputStreamReader(
                clientSocket.getInputStream()));

        String fromClient = in.readLine();
        System.out.println(fromClient);

        in.close();
        clientSocket.close();
        serverSocket.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

在服务器端的控制台中:
DSCP当前值:10

我的服务器代码和客户端位于不同的计算机上。

在wireshark中,我看到:

区分服务字段:0x00(DSCP 0x00:默认; ECN:0x00:Not-ECT(不支持ECN的传输))

我希望看到Wireshark发生变化,并且我只会看到默认值零。

最佳答案

上一次我使用Java使用DSCP值时,由于JVM中的错误,不得不将java.net.preferIPv4Stack系统属性设置为true。否则,尽管看起来在java.net.Socket API中起作用,也不会在基础套接字上设置DSCP值。

另外,您可能必须在连接套接字之前调用setTrafficClass,在某些平台上连接后可能无法正常工作。
java -Djava.net.preferIPv4Stack=true ...

07-24 09:20