C# 尝试使用提供的API、TCP和C上的JSON与Heatmiser neoHub通信#

C# 尝试使用提供的API、TCP和C上的JSON与Heatmiser neoHub通信#,c#,json,tcp,C#,Json,Tcp,我正试图编写一个简单的程序来与Heatmiser neoHub进行通信,它应该能够获取和设置有关我的加热系统的各种信息 根据Heatmiser API文档,我应该在neoHub的端口4242上使用TCP上的JSON,我认为我的发送代码可以工作,但没有收到响应 using System.Net.Sockets; using System.Text; namespace NeoHub { class Program { static void Main(string

我正试图编写一个简单的程序来与Heatmiser neoHub进行通信,它应该能够获取和设置有关我的加热系统的各种信息

根据Heatmiser API文档,我应该在neoHub的端口4242上使用TCP上的JSON,我认为我的发送代码可以工作,但没有收到响应

using System.Net.Sockets;
using System.Text;

namespace NeoHub
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect("192.168.0.204", 4242);
            socket.ReceiveTimeout = 10000;

            Console.WriteLine("connected...");
            string jsonData = "{\"GET_LIVE_DATA\":0}";

            byte[] sendData = Encoding.UTF8.GetBytes(jsonData);
            byte[] readData = new byte[1024 * 4];

            try
            {
                int sendBytes = socket.Send(sendData);
                Console.WriteLine("sent {0}...", sendBytes);

                int readBytes = socket.Receive(readData);
                Console.WriteLine("receive {0}...", readBytes);
                Console.WriteLine(Encoding.UTF8.GetString(readData));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
    }
}
目前,我有一个小型的.Net Core 2.2控制台应用程序,它将JSON命令编码为字节数组,并将其发送到连接到neoHub的TCP套接字,然后等待neoHub的响应

我的第一次尝试将解析返回的JSON,连接没有超时,并等待了几分钟,然后我将在没有响应的情况下终止应用程序。当前版本已经进一步简化,只需将任何未解析的JSON响应输出到控制台,只需等待10秒,但仍然没有得到响应

using System.Net.Sockets;
using System.Text;

namespace NeoHub
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect("192.168.0.204", 4242);
            socket.ReceiveTimeout = 10000;

            Console.WriteLine("connected...");
            string jsonData = "{\"GET_LIVE_DATA\":0}";

            byte[] sendData = Encoding.UTF8.GetBytes(jsonData);
            byte[] readData = new byte[1024 * 4];

            try
            {
                int sendBytes = socket.Send(sendData);
                Console.WriteLine("sent {0}...", sendBytes);

                int readBytes = socket.Receive(readData);
                Console.WriteLine("receive {0}...", readBytes);
                Console.WriteLine(Encoding.UTF8.GetString(readData));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
    }
}
{“GET_LIVE_DATA”:0}的结果应该是一个类似于下面的JSON文件(我已经截断了示例输出)


通过查看GitHub上的Python解决方案,我成功地解决了自己的问题

这个小而关键的补充是一条线的尽头:

string jsonData = "{\"GET_LIVE_DATA\":0}";
需要

string jsonData = "{\"GET_LIVE_DATA\":0}" + "\0\r";

我正在寻找自己的API。你有文档的链接吗?欢迎任何其他相关文档/指南!我不确定这是否仍然是最新的,但它是由Heatmiser的支持团队在与他们进行电子邮件交谈后发送的