首页 > 解决方案 > Java通过Socket高频发送短字符串

问题描述

我正在尝试制作一个应用程序来控制 DMX 通道。为此,我有一个 ESP8266,它将字符串作为输入,如“2.255”,其中第一个整数是 DMX 通道,第二个整数是值。

对于我的 PC,我编写了一个方法,该方法首先构建字符串,然后通过 Socket 将其发送到 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();
            }

     }
}

这很好用,但是当我尝试淡化时我遇到了问题。这段代码的频率似乎太慢了。

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

标签: javasocketsnetworkingudppacket

解决方案


您可以执行以下操作来加快代码速度:

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

  2. 不要每次都打开、关闭、重新打开等套接字。保持打开状态。


推荐阅读