- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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/
如何使用 Java 获取 DiffServe 代码点 (DSCP) 整数的优先级部分?我预计它涉及位移位,但由于某种原因,我似乎无法获得我期望的值。 最佳答案 假设我理解正确,只需向右执行 3 位逻辑
我需要使用 DSCP 标记来标记数据包以测试产品,但我没有找到直接执行此操作的方法。我只是遗漏了什么,还是我真的需要开始学习 C 语言的网络编程才能完成这项工作? 或者,有没有比 iperf 更好的发
在下面的代码中: struct ip_header { unsigned char ip_hl:4; unsigned char ip_ver:4; u
可以使用 setsockopt() 函数设置套接字选项。 相应的选项位于以下链接中: https://linux.die.net/man/3/setsockopt 此 API 是否允许设置套接字的 d
如何发送 DSCP - 使用 iperf 标记数据包? 我在 Windows 1.7.0 版本中没有找到该选项。是否有适用于 Windows 的更新版本的 iperf? 最佳答案 您必须使用“-S”选
这些问题和我的很相似: Why DSCP always 0x00 (default) on Windows 7? Issue with DSCP marking using setTrafficCla
我正在使用 android Studio 进行应用程序开发,我想使用 UDP 套接字在 ip header 中设置 DSCP 值。我正在关注这个 example . import android.os
如何设置 TOS flags/DSCP flags在 UDP/TCP 流上的 Ruby 中(最好使用 Ruby/Sockets 库)? 最佳答案 您可以使用 Socket.setsockopt 设置
我正在尝试使用 setTrafficClass 标记 DSCP 值。我在两台不同的机器上设置了服务器和客户端,我能够打印 DSCP 的值,但在 WireShark 中看不到它。我在网上浏览了一些帖子,
我正在尝试在 Java 中设置 UDP 数据包 header 中的 DSCP 字段,如下所示: bcSock = new DatagramSocket(port, address); bcSock.s
我将尝试通过我的 Raspberry Pi 接入点保证一些 QoS。 开始之前,我先动手:我阅读了有关 tcp、udp 和 ip header 的内容。在IP header description我看
我有 TCP 客户端和服务器套接字,并且在客户端和服务器套接字上设置了具有不同值的套接字选项 IP_TOS(例如 Client dscp = 0x21 和 Server Dscp = 0x38)。现在
我是一名优秀的程序员,十分优秀!