Java通过套接字以高频率发送短字符串

时间:2018-11-25 19:03:52

标签: java sockets networking udp packet

我正在尝试制作一个用于控制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();
            }

     }
}

这可以正常工作,但是在尝试淡入淡出时出现问题。这段代码的频率似乎太慢了。

有人有“更快”的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您可以采取以下措施来加快代码的速度:

  1. 请勿为IP地址呼叫getByName。这涉及DNS,但IP地址不需要DNS。而是调用getByAddress。如果确实需要调用getByName,则只需调用一次并缓存答案。

  2. 不要每次都打开,关闭,重新打开插座等。只需保持打开状态即可。