TCP JSON命令未到达

时间:2017-04-24 20:44:38

标签: 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是否到来)
  • 在笔记本电脑上运行以上程序到笔记本电脑localhost - >成功接收消息是完全一样的。
  • 在rpi上使用telnet将json发送到yeelight ip + port - >成功...

我真的迷失了为什么程序在从我的RPI运行时无效。

希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:1)

我认为问题在于println功能。 yeelight的开放API声明命令的结尾必须有\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”“。