gpt4 book ai didi

java - 无法在 Android 应用程序中设置 DSCP 值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:40 26 4
gpt4 key购买 nike

我正在使用 android Studio 进行应用程序开发,我想使用 UDP 套接字在 ip header 中设置 DSCP 值。我正在关注这个 example .

import android.os.Message;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UdpClientThread extends Thread{

String dstAddress;
int dstPort;
private boolean running;
MainActivity.UdpClientHandler handler;
DatagramSocket socket;
InetAddress address;

public UdpClientThread(String addr, int port, MainActivity.UdpClientHandler handler) {
super();
dstAddress = addr;
dstPort = port;
this.handler = handler;

}

public void setRunning(boolean running){
this.running = running;
}

private void sendState(String state){
handler.sendMessage(
Message.obtain(handler,
MainActivity.UdpClientHandler.UPDATE_STATE, state));
}

@Override
public void run() {
sendState("connecting...");

running = true;
System.setProperty("java.net.preferIPv4Stack", "true");


try {
socket = new DatagramSocket();
socket.setTrafficClass(128); //Setting the DSCP value
address = InetAddress.getByName(dstAddress);

// send request
byte[] buf = new byte[256];

DatagramPacket packet =
new DatagramPacket(buf, buf.length, address, dstPort);


socket.send(packet);

sendState("connected");

// get response
packet = new DatagramPacket(buf, buf.length);


socket.receive(packet);
String line = new String(packet.getData(), 0, packet.getLength());

handler.sendMessage(
Message.obtain(handler, MainActivity.UdpClientHandler.UPDATE_MSG, line));

} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(socket != null){
socket.close();
handler.sendEmptyMessage(MainActivity.UdpClientHandler.UPDATE_END);
}
}

}
}

我在这个论坛上进行了搜索,我了解到使用 System.setProperty("java.net.preferIPv4Stack", "true") 我们可以操纵 DSCP 值。但这似乎不适用于 android 应用程序。我怎样才能达到预期的行为?我在这里错过了什么吗?该代码没有任何错误,但是当我检查 wireshark(捕获“任何”接口(interface),然后为 udp 应用过滤器)时,数据包的 DSCP 值没有改变。我在 ubuntu 16 上使用模拟器来测试场景。感谢您的帮助。

最佳答案

以上代码适用于 android 设备(在 samsung galaxy S4 上测试)但不适用于模拟器。但是,我无法在运行时通过代码设置此 System.setProperty("java.net.preferIPv4Stack", "true");。无需在 android 中显式设置此属性即可设置 DSCP。除此之外,如果您想使用简单的 java 程序而不是 android 更改 IP header 中的 DSCP 值,您可以看看这个 answer .

关于java - 无法在 Android 应用程序中设置 DSCP 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44042460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com