我需要帮助排除以下故障。我有一个非常简单的程序发送TCP命令,成功地将JSON数据从我的笔记本电脑发送到我的Yeelight RGB Light,但不是从Raspberry PI。

import java.io.*;
import java.net.*;

class TCPClient
{
        public static void main(String args[]) throws Exception
        {
                String modifiedSentence;
                Socket clientSocket = new Socket(args[0], 55443);
                DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
                PrintWriter printWriterw = new PrintWriter(outToServer);
                BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                String command = "{\"id\":1,\"method\":\"set_rgb\",\"params\":[13631232, \"smooth\", 500]}";
                printWriterw.println(command);
                printWriterw.flush();
                modifiedSentence = inFromServer.readLine();
                System.out.println("FROM SERVER: " + modifiedSentence);
                clientSocket.close();
        }
}

我的笔记本电脑上还有一个充当tcpserver的程序,这样我就可以看到是否可以向笔记本电脑ip发送和接收相同的消息。
RPI、笔记本电脑、YeeLight->All在同一网络中
在笔记本电脑上运行以上程序,以突出显示iPadress->Success
在RPI上运行以上程序到Yeelight iPadress->一直等待响应,超时。
在笔记本电脑上运行以上程序,以突出显示iPadress->Success
在rpi-to-laptop ipaddress上运行上述程序->成功(只需检查json是否到达)
在笔记本电脑上运行上述程序到笔记本电脑本地主机->成功接收消息完全相同。
使用rpi上的telnet将json发送到yeelight ip+端口->成功…
从我的RPI运行时,我真的搞不懂程序为什么不工作。
希望有人能帮忙。

最佳答案

我认为问题在于println函数。open api for yeelight声明命令结尾必须有\r\n。这是Windows机器上的默认值(我想您在笔记本电脑上使用),而Raspberry PI可能是Linux,它只使用\n进行换行。代替println(),手动将\r\n附加到命令。我相信这能解决你的问题。
供参考:
此处可找到YeeLight API的文档:http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf
在第8页上,它指出“所有消息必须在定义的
TCP连接上的JSON格式和每个单独的消息必须由
\r\n”。

10-08 00:34