我需要帮助解决以下问题。我有一个非常简单的程序发送 TCP 命令,它成功地将 json 数据从我的笔记本电脑发送到我的 Yeelight RGB 灯,但不是从树莓派。
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 -> 都在同一网络中
- 在笔记本电脑上运行以上程序到Yeelight IPadress -> 成功
- 在 RPI 上运行以上程序到 Yeelight IPadress -> 一直等待响应,超时。
- 在笔记本电脑上运行以上程序到Yeelight IPadress -> 成功
- 在 rpi 上运行上面的程序到笔记本电脑 IPadress -> 成功(只是检查 json 是否到达)
- 在笔记本电脑上运行上面的程序到笔记本电脑本地主机 -> 成功接收消息完全相同。
- 在rpi上使用telnet将json发送到yeelight ip + port -> success...
我真的不知道为什么程序在从我的 RPI 运行时无法运行。
希望有人能帮忙。
最佳答案
我认为问题出在 println 函数上。 yeelight 的开放 API 规定命令的结尾必须有 \r\n
。这是 Windows 机器上的默认设置(我想你在笔记本电脑上使用它),但树莓派可能是 linux,它只用 \n
换行。代替 println(),手动将 \r\n
附加到命令。我相信这会解决您的问题。
供引用:
yeelight API 文档可在此处找到:http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf
在第 8 页上声明“所有消息必须按定义的方式传递
TCP 连接上的 JSON 格式,每个单独的消息必须由
“\r\n
”。
关于java - TCP JSON 命令未到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43597398/