java - TCP JSON 命令未到达

标签 java json tcp raspberry-pi

我需要帮助解决以下问题。我有一个非常简单的程序发送 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/

相关文章:

java - 自定义解决JAXB "name collision in the ObjectFactory class"问题

java - JPanel#setVisible 不工作。

json - ExtJS 4 Spring 3 文件上传。服务器发送错误响应内容类型

c - 理解一个函数。 pcap 和 BPF

vb.net - VB.Net 中使用 TCP 套接字的应用程序之间的文本通信

c - 有没有办法告诉操作系统丢弃任何缓冲的传出 TCP 数据?

java - 如何用Java读取JSON数据

Java Selenium-link missing field 错误警告给字段

python - 根据 Google Cloud Bigtable 中的唯一 ID 选择 JSON 对象

php - 来自 Twitter API 的 JSON 包含\u2019