0

如果这个问题重复,我很抱歉,但我没有找到正确的答案。我是 Java 新手,我正在尝试使用套接字连接到我的 Yeelight 气泡。以下代码适用于 Windows 10,但不适用于 Ubunut 20.04。端口已打开,但不知何故这在 linux 上不起作用,但在 windows 上起作用。

private void sendCommand(String method, String params) {
    Socket socket = null;
    PrintWriter out = null;
    BufferedReader in = null;

    try {
        socket = new Socket("192.168.1.108", 55443);
        socket.setSoTimeout(1000);
        out = new PrintWriter(socket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }

    try {

        out.println("{ \"id\": 1, \"method\": \"" + method + "\", \"params\":[" + params + "]}");
        System.out.println(in.readLine());
        out.close();
        in.close();
        socket.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

我总是收到消息:“接收超时”和“读取超时”。有谁知道为什么这在linux上不起作用?

编辑:当我替换e.getMessage()e.printStackTrace()我得到这个:

Receive timed out
java.net.SocketTimeoutException: Read timed out
at java.base/java.net.SocketInputStream.socketRead0(Native Method)
at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)
at com.company.YeeLight.sendCommand(YeeLight.java:105)
at com.company.YeeLight.power(YeeLight.java:85)
at com.company.Main.main(Main.java:10)

主.java

YeeLight yL = new YeeLight();
yL.power("on", 500);

YeeLight 类中的幂方法

public void power(String power, int duration) {
        this.sendCommand("set_power", "\"" + power + "\", \"smooth\", " + duration);
    }
4

0 回答 0