0

我正在创建一个智能家居服务器,我想支持 Google 智能家居操作。服务器应用程序是使用 HttpListener 用 C# 编写的,我使用 Mono 5.18(5.20 版本与 httpcfg 存在问题)在 Debian 10 服务器上运行它。服务器应用程序工作正常,但程序未收到 5 个查询中的 1 个。Tcpdump 显示某种类型的流量,但应用程序没有得到任何流量。

我尝试重新安装 Debian 2 次,使用不同的单声道版本,更改端口,在 Windows 10 上运行它,禁用它提供 MQTT 和 MySQL 支持的部分代码,禁用防火墙并且没有任何反应。主要问题是谷歌服务器只有一个失败后没有发送任何数据包,我必须在谷歌主页应用程序中断开并重新连接我的设备。

有我的 HttpListner 代码:

static HttpListener listener;
//...

static void Main(string[] args)
{
        //...
        HttpServiceMain();
}

//...

private static void HttpServiceMain()
{

    listener = new HttpListener();
    listener.Prefixes.Add("https://*:2030/");
    listener.Start();

    while (true)
    {
        ProcessRequest();                               
    }
}

static void ProcessRequest()
{
    var result = listener.BeginGetContext(ListenerCallback, listener);
    var startNew = Stopwatch.StartNew();
    result.AsyncWaitHandle.WaitOne();
    startNew.Stop();
    Console.WriteLine("Elapsed miliseconds: " + startNew.ElapsedMilliseconds);
}

static void ListenerCallback(IAsyncResult ar)
{
    Console.WriteLine("Listening...");
    HttpListenerContext context = listener.EndGetContext(ar);
    HttpListenerRequest request = context.Request;

    string documentContents;

    using (Stream receiveStream = request.InputStream)
    {
        using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
        {
            documentContents = readStream.ReadToEnd();
        }
    }

    string responseString = "{}";

    //Creating response and exporting it to 'responseString'
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
    HttpListenerResponse httpResponse = context.Response;
    httpResponse.StatusCode = 200;
    httpResponse.StatusDescription = "OK";
    httpResponse.ContentLength64 = buffer.Length;
    System.IO.Stream output = httpResponse.OutputStream;
    output.Write(buffer, 0, buffer.Length);
    httpResponse.Close();
}

我说过,5 次中有 4 次一切正常,但是在某些请求服务器没有得到查询后,我必须重新连接 Google Home App 和我的服务。这是 HttpListener、我的代码或 Google Server 中的错误吗?你有什么想法吗?

4

0 回答 0