我正在尝试制作一个用于控制DMX通道的应用程序。为此,我有一个ESP8266,它使用String作为输入,例如“ 2.255”,其中第一个整数是DMX通道,第二个整数是值。
对于我的PC,我编写了一种方法,该方法首先构建字符串,然后通过套接字将其感知到ESP8266的IP地址。
for(DMXChannel c : list){
if(lastvalue.get(c.getChannelID() - 1) != c.getValue()){
try {
String msg = c.getChannelID() + "." + c.getValue();;
DatagramSocket clientSocket = new DatagramSocket();
InetAddress ipaddr = InetAddress.getByName(ip); //IP Address is "192.168.4.1"
byte[] sendData = new byte[1024];
sendData = msg.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipaddr, 8888);
clientSocket.send(sendPacket);
clientSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这可以正常工作,但是在尝试淡入淡出时出现问题。这段代码的频率似乎太慢了。
有人有“更快”的解决方案吗?
答案 0 :(得分:1)
您可以采取以下措施来加快代码的速度:
请勿为IP地址呼叫getByName
。这涉及DNS,但IP地址不需要DNS。而是调用getByAddress
。如果确实需要调用getByName,则只需调用一次并缓存答案。
不要每次都打开,关闭,重新打开插座等。只需保持打开状态即可。