使用setTrafficClass和WireShark发出DSCP标记问题

我正在尝试使用setTrafficClass标记DSCP值。 我在两台不同的机器上设置了服务器和客户端,我能够打印DSCP的值,但我无法在WireShark中看到它。 我在线浏览了一些post,但没有任何帮助。 我使用的是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:非ECT(不支持ECN))

我希望看到wireshark的变化,我只看到默认值为零。

上次我使用Java中的DSCP值时,由于JVM中的错误,必须将java.net.preferIPv4Stack系统属性设置为true 。 尽管看起来在java.net.Socket API中工作,但不会在底层套接字上设置Othwerwise DSCP值。

此外,您可能必须在连接套接字之前调用setTrafficClass ,在某些平台上连接后它可能无法工作。

java -Djava.net.preferIPv4Stack=true ...