如何使用 Java/Kotlin 套接字向本地网络上的设备发送消息?

安德鲁

我需要向本地网络上连接的 IoT 设备发送消息(JSON 格式)。该设备是一个智能灯泡,我想在每次请求时切换。我知道设备的 IP 地址和端口。

我已经能够使用 Python 脚本来控制它,如下所示:

request = """{"id":1,"method":"toggle","params":["smooth",300]}\r\n""".encode("utf8")
    
print(request) # Prints: b'{"id":1,"method":"toggle","params":["smooth",300]}\r\n'
    
_socket= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_socket.settimeout(5)
_socket.connect(('123.456.7.89', 12345))
_socket.send(request)

但我需要使用 Java/Kotlin 运行它。我尝试转换代码,到目前为止我得到了这个(在 Kotlin 中):

val request = """{"id":0,"method":"toggle","params":["smooth",300]}\r\n""".encodeUtf8().toByteArray()
    
println(String(request, Charsets.UTF_8)) // Prints: {"id":0,"method":"toggle","params":["smooth",300]}\r\n
    
val socket = Socket()
val socketAddress = InetSocketAddress("123.456.7.89", 12345)
socket.connect(socketAddress, 5_000)
socket.getOutputStream().write(request)

这个脚本运行没有任何异常,但它也不起作用,我找不到从这里继续的方法。

里奥·塔皮亚

在 Java 中,您可以执行以下操作:

public class Client {

    public static final String LOCALHOST = "localhost"; // Example host
    public static final int PORT = 1234;                // Example port

    public static void main(String[] args) throws IOException {
        try (Socket socket = new Socket(LOCALHOST, PORT)) {
            System.out.println("Connected to Server!");
            BufferedWriter socketWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8));
            socketWriter.write("{\"id\":1,\"method\":\"toggle\",\"params\":[\"smooth\",300]}\n");
            socketWriter.close();
        }
        System.out.println("Disconnected from server");
    }
}

如果您有 JDK 15+,您可以使用新的文本块功能来编写字符串:

/*socketWriter.write("""
    {"id":1,"method":"toggle","params":["smooth",300]}
    """);*/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将套接字连接到本地网络上的服务器套接字?

如何通过IP地址(WCF或套接字)在同一本地网络上的计算机之间发送信息?

如何监视本地网络上所有设备的带宽使用情况?

如何在Android本地网络上获取的所有设备的IP地址和名称

使用客户端Javascript与本地网络上的设备通信

如何在本地网络上设置Git?

如何在本地网络上连接到Xorg

Android:如何在本地网络上共享文件?

如何在本地网络上运行 Brunch + React

如何使Nixos上的grafana在本地网络中可用

如何使Nixos上的Zabbix在本地网络中可用

如何使本地网络上的 WebRTC 视频流工作?

在本地网络上使用 Google 的 Python-ADB

iOS 14:如何延迟“ [[App Name]”想要查找并连接到本地网络上的设备”通知?

渐进式 Web 应用程序可以与本地网络上的设备一起使用吗?

如何使用javascript将UDP数据包发送到本地网络广播

如何使用 NetworkManager 在本地网络上设置静态 IP 地址?

使用ZFS系统的主机,如何使其可用于本地网络上的其他主机?

如何使用C#确定本地网络上的哪些IP地址是静态/动态的?

如何强制Nmap在本地网络上使用-PE选项?

如何使用Ubuntu杀死本地网络上Windows机器中的进程?

如何使用Phoenix向特定的套接字发送消息

如何使用本地网络设置反向 DNS 查找?

使用本地网络IP地址(192.168.xxx.xxx)获取设备的MAC地址

如何在同一本地网络的电话之间发送通知?

如何使用cppzmq从ROUTER套接字向特定的DEALER套接字发送ZeroMQ消息?

主机和服务(如文件共享)如何在本地网络上发布?

如何在Linux Mint中解析本地网络上的主机名?

TCP-JAVA-如何在本地网络上查找服务器?