Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >0xC0000008:使用NetQM在Hololens 2中指定了无效句柄

0xC0000008:使用NetQM在Hololens 2中指定了无效句柄
EN

Stack Overflow用户
提问于 2022-05-23 09:54:32
回答 1查看 184关注 0票数 0

我试图通过ZMQ插座向Python服务器发送一些数据。Python服务器也使用ZMQ创建一个套接字。

代码语言:javascript
代码运行次数:0
复制
```lang-python

打印(“连接统一工具包.”)

context = zmq.Context()

socket = context.socket(zmq.REP)

socket.bind('tcp://*:5555')

而True:

代码语言:javascript
代码运行次数:0
复制
request = socket.recv_multipart()
代码语言:javascript
代码运行次数:0
复制
print("Somethings received");
代码语言:javascript
代码运行次数:0
复制
req = json.loads(request[1])
代码语言:javascript
代码运行次数:0
复制
print("Received from Unity Toolkit: ", req)
代码语言:javascript
代码运行次数:0
复制

我尝试使用Python客户端与该服务器进行通信,它可以工作,但当我尝试使用Unity3D项目中的.NET ZMQ库进行通信时,有一个异常我不知道如何处理。给我的NETQMClient (这是来自一个旧项目的遗留代码,但我可以更改它)这样做:

代码语言:javascript
代码运行次数:0
复制
```lang-csharp

//使用Thread()执行这一行

AsyncIO.ForceDotNet.Force();

requestSocket =新的RequestSocket();

requestSocket.Connect("tcp://192.162.0.104:5555");

isAvailable =真;

时间(!clientStopped){

代码语言:javascript
代码运行次数:0
复制
  //Debug.Log("Continuing");

}

requestSocket.Close();

NetMQConfig.Cleanup();

运行在线程上的函数的//结束

//.

//稍后,当按下按钮时

尝试{

代码语言:javascript
代码运行次数:0
复制
//endpoint is a one-character string that 
代码语言:javascript
代码运行次数:0
复制
//the server uses as a cue for something   
代码语言:javascript
代码运行次数:0
复制
requestSocket.SendMoreFrame(endpoint);   
代码语言:javascript
代码运行次数:0
复制
requestSocket.SendFrame(request); //this a class turned into a JSON using JsonUtility.ToJson

} catch (System.Exception) {

代码语言:javascript
代码运行次数:0
复制
Debug.Log("Something went wrong");
代码语言:javascript
代码运行次数:0
复制
throw;

}

代码语言:javascript
代码运行次数:0
复制

稍后,C#脚本等待响应,我处理该响应并使用它。问题是,我已经测试过它在同一台计算机上运行客户端和服务器,它可以工作。但是,当我将项目部署到真正的Hololens 2( NETQM客户端运行的地方)时,我会在Visual中得到这个错误。

我添加了try catch块,以查看是否存在一些奇怪的行为,但在这一点上也不例外。任何关于正确方向的提示都将不胜感激。

编辑:在这个项目中用于复制错误的全部脚本。

这个类保存稍后将转换为JSON的数据

代码语言:javascript
代码运行次数:0
复制
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class Serialization {
    public int numPanels;
    public bool colorHarmony;
    public float colorfulness;

 [Serializable]
 public Request(int numPanels, bool colorHarmony, float colorfulness) {
        this.numPanels = numPanels;;
        this.colorHarmony = colorHarmony;
        this.colorfulness = colorfulness;
    }
}

这是具有ZMQ逻辑的脚本

代码语言:javascript
代码运行次数:0
复制
using System.Collections.Generic;
using System.Threading;
using NetMQ;
using NetMQ.Sockets;
using UnityEngine;

public class PythonNetworking {
    private bool clientStopped;
    private RequestSocket requestSocket;

    private byte[] frame;
    // for now only one request at a time is supported
    public string requestResult;
    private bool isAvailable;

    public PythonNetworking() {
        clientStopped = false;
        var clientThread = new Thread(NetMQClient);
        clientThread.Start();
    }
    

    public void StopClient() {
        clientStopped = true;
    }

    // ReSharper disable once InconsistentNaming
    private void NetMQClient() {
        AsyncIO.ForceDotNet.Force();

        requestSocket = new RequestSocket();
        // Computer running the server which must receive the info
        requestSocket.Connect("tcp://192.168.0.104:5555");
        
        isAvailable = true;

        while (!clientStopped)
        {
            //Debug.Log("Continuing");
        }

        requestSocket.Close();
        NetMQConfig.Cleanup();
    }

    public void SetFrame(byte[] currFrame) {
        frame = currFrame;
    }

    // Create queue of requests in case multiple have to be handled
    private void SimpleRequest(string endpoint, string request) {
        // wait until socket is available
        while (!isAvailable) {
            //Debug.Log("Socket unavailable");
        }

        isAvailable = false;
        if (request == null) {
            requestSocket.SendFrame(endpoint);
        } else {
            Debug.Log("Sending to Python server: " + request);
            try
            {    
                requestSocket.SendMoreFrame(endpoint);
                Debug.Log("SendMoreFrame called");
                requestSocket.SendFrame(request);
                Debug.Log("SendFrame called");

            }
            catch (System.Exception)
            {
                Debug.Log("Something went wrong");
                throw;
            }
            
        }

        var msg = requestSocket.ReceiveFrameBytes();
        Debug.Log("ReceiveFrameBytes returned a value");
        isAvailable = true;
        requestResult = System.Text.Encoding.UTF8.GetString(msg);
    }

    public void PerformRequest(string endpoint, string request) {
        requestResult = null;
        var requestThread = new Thread(() => SimpleRequest(endpoint, request));
        requestThread.Start();
    }
}

这是在触发事件时发出请求的脚本:

代码语言:javascript
代码运行次数:0
复制
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.UI;
using Newtonsoft.Json;

public class MyTool: MonoBehaviour {

private PythonNetworking pythonNetworking;
public struct PanelConstraints {
    public string name;
    public float height;
    public float width;
}

public void Start() {
    pythonNetworking = new PythonNetworking();
    Debug.Log("Tool initialized!");
    //called here for debugging purposes, this method is called when a button is pressed
    SubmitConstraints();
}
//When a button is pressed
public void SubmitConstraints() {
    Debug.Log("Submitting constraints...");
    StartCoroutine(CreateRequest("P"));
}

private IEnumerator CreateRequest(string type) {
    Serialization.Request request = new Serialization.Request(1, false, 1.0f);
    var requestJson = JsonUtility.ToJson(request);
    pythonNetworking.PerformRequest(type, requestJson);
    yield return new WaitUntil(() => pythonNetworking.requestResult != null);

    if (type == "P") {
         panelData = JsonConvert.DeserializeObject<List<string>>(pythonNetworking.requestResult);
        } 
    }
}

最后,Python服务器代码是:

代码语言:javascript
代码运行次数:0
复制
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind('tcp://*:5555')

while True:
    request = socket.recv_multipart()
    print("Somethings received");
    req = json.loads(request[1])
    #Data is processed

根据设置,我使用Unity2019.4.26f1,我创建了一个3D场景,向它添加了一个GameObject,我将脚本MyTool.cs附加到它上,并在前面的GameObject下附加了一个按钮。单击该按钮时,将调用SubmitContrainst()方法(为了调试目的,现在在Start()中自动调用该方法)。这个场景是使用VisualStudio2019在Hololens 2中部署的(尽管我尝试在“游戏模式”中运行它,与另一台计算机通信以重新创建部署环境,即在不同设备中与客户端和服务器以及库的不同实现进行通信)。当应用程序即将在Hololens中启动时,抛出我前面介绍的异常(请参阅屏幕截图)。使用PythonVersion3.10.4运行的Python没有收到任何信息。TCP通信似乎有效,因为当我在不同的主机上运行两个Python脚本(使用REQREP与ZMQ进行客户机/服务器通信)时,它可以工作,但我觉得这种通信在Hololens 2上不起作用。但这感觉很奇怪,因为我已经设法将Hololens 2与另一个设备(使用另一个库Windows.Networking.Socket)进行通信。

EN

回答 1

Stack Overflow用户

发布于 2022-06-02 21:55:28

是否导航到设置,->发布设置,以检查项目的功能,并确保根据目的启用了Internet或。它还可以在C#项目的清单文件中进行检查和修改。

抛出的异常周围的代码更像是Unity,您需要添加断点来查看这个问题是否是由失败的套接字连接引起的。

此外,您还可以参考关于Web套接字客户端断开UWP构建中抛出的异常- Unity的讨论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72352910

复制
相关文章
html中嵌入iframe进行父子页面参数传递[通俗易懂]
1.父页面调用子页面函数,选择iframe的id + contentWindow +子页面的函数名([参数列表])
全栈程序员站长
2022/09/14
3.4K0
将外部窗体程序嵌入到QWidget中
下列代码例子中实现的将窗体名字为Example的窗体嵌入到QWidget中。 #include <QApplication> #include <QWindow> #include <QWidget> #include <windows.h> int main(int argc, char *argv[]) { QApplication a(argc, argv); WId winId = (WId)FindWindow(NULL, L"Example"); QWindow *
Qt君
2023/03/17
1.4K0
将外部窗体程序嵌入到QWidget中
将群晖相册嵌入到Hexo博客中
如何高效便捷的在博客中更新自己的动态是困扰很多人的问题,简单的方案就是另起炉灶在博客重新发布一份,但这种方法耗时耗力,因此不建议这样做。从原po平台同步到博客的某个位置应该是最理想的解决方案。对于照片来说,群晖的相册给我提供了一个来源库,那么如果我想让访客浏览我的近照,那么如何把照片从群晖相册同步到博客中就成了实现这一想法的核心问题。
ZONGLYN
2020/06/29
2K0
将群晖相册嵌入到Hexo博客中
Ajax出错并返回整个页面html的问题
有这样一个例子在thinkPHP视图页面执行一个给评论点赞的功能,为了强化用户体验,一般都采用ajax异步请求后台处理点赞数据,成功后页面执行局部更新后的数据即可。前台通常会用到jquery,通过执行jquery的ajax方法更加简单方便的完成任务请求。
世纪访客
2018/08/02
2K0
Ajax出错并返回整个页面html的问题
如何将Tableau Server中的视图嵌入web页面
Tableau作为可视化数据分析软件中的佼佼者,将数据运算与美观的图表完美地嫁接在一起。它的程序很容易上手,各公司可以用它将大量数据拖放到数字“画布”上,转眼间就能创建好各种图表。创建与共享绝妙的数据可视化内容,Tableau 为您呈上唾手可得的可视化分析能力。它帮助您生动地分析实际存在的任何结构化数据,以在几分钟内生成美观的图表、坐标图、仪表盘与报告。利用 Tableau 简便的拖放式界面,您可以自定义视图、布局、形状、颜色等等,帮助您展现自己的数据视角。另外他还适用于多种数据文件与数据库,数据可扩展性强,不限制您所处理的数据大小。
阿Q说代码
2021/05/13
3.2K0
如何将Tableau Server中的视图嵌入web页面
如何将高德地图JS API嵌入到HTML网页内
先去https://lbs.amap.com/注册一下,直接用淘宝/QQ等OpenID既可实现注册。 没有要求实名制,填写姓名的时候,填写英文名。
繁华是客
2023/03/03
4.9K0
输入URL到渲染出整个页面的过程
DNS解析URL > 浏览器发送请求与服务器交互 > 浏览器对接收到的html页面渲染
小黑同学
2021/02/04
9420
输入URL到渲染出整个页面的过程
如何将html格式动态图表网页嵌入ppt中
前几天魔方学院(其实就是我的公众号交流群啦~_~)的一位群友突然在群里提了一个问题! 看了之前推送的REmap相关内容,结果导出的图表是html格式的动态图,不知道如何将此种格式的图表放在ppt中使用。 这确实很尴尬他呀,你不能直接拿着Rstudio跟客户演示呀(而且还不保证每一台PC上都安装有R语言软件),如果是ppt展示,突然退出来,然后用浏览器打开html文件也是够突兀的。 当然这个情况在r语言中其实很普遍,很多依赖底层js语言编写的二次开发包(比如R语言中的recharts、RERmap、Rchar
数据小磨坊
2018/04/11
33.8K2
如何将html格式动态图表网页嵌入ppt中
C#将引用的dll嵌入到exe文件中
4.实现如下代码, 在窗口构造中实现也可以(在窗体事件中无效,如winform_load)
zls365
2020/08/19
4K0
Vscode新建html页面没有模板「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171893.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/23
1.2K0
Vscode新建html页面没有模板「建议收藏」
Python odoo中嵌入html简单
在odoo中,通过iframe嵌入 html,页面数据则通过controllers获取,使用jinja2模板传值渲染
py3study
2020/01/15
2.2K0
Python odoo中嵌入html简单
在 HTML 中嵌入 PHP 代码
PHP 天生对 Web 和 HTML 友好,在 PHP 诞生之初,主要用于在 Web 1.0 中构建个人主页,那个时候,PHP 代表的是 Personal Home Page,随着 Web 互联网的发展,在 Web 2.0 时代,PHP 进一步进化为 PHP:Hypertext Preprocessor,即超文本处理器,而 HTML 则是 HyperText Markup Language 的缩写,也就是超文本标记语言。
学院君
2020/05/28
6.3K0
从输入 URL 到渲染页面整个过程 梳理篇
这意味着当前页面即将要被替换成新的页面,不过在这个流程继续之前,浏览器还给了当前页面一次执行 beforeunload 事件的机会,beforeunload 事件允许页面在退出之前执行一些数据清理操作,还可以询问用户是否要离开当前页面,比如当前页面可能有未提交完成的表单等情况,因此用户可以通过 beforeunload 事件来取消导航,让浏览器不再执行任何后续工作。
玖柒的小窝
2021/11/07
7590
从输入 URL 到渲染页面整个过程 梳理篇
NodeJs 中的 HTML 模板
HTML 模板是一种允许我们创建基本 HTML 结构并使用占位符根据从 JSON 文件或数据库中检索到的数据动态生成内容的技术。
海拥
2023/03/09
6.5K0
我们是如何将 Cordova 应用嵌入到 React Native 中
重写一个应用是一件简单的事,可是演进一个应用则是一件复杂的工作。 过去的一年多里,我在工作上的主要职责是:手机 APP 开发。日常主要是编写基于 Ionic 和 Angular 的混合应用,并想方设法地帮助客户将之与 React Native 相结合。在完成了嵌入 WebView 后,重写插件等一系列工作后,便想记录一下这个过程中遇到的坑。 平滑地演进 如我在开头所说,在有足够人力和物力的情况下,最好的方式就是在重写应用。 一来,应用在其生命周期里,经过了不同的开发人员、不同的业务变更,必然有大量的遗留代码
Phodal
2018/01/29
4.9K0
点击加载更多

相似问题

将整个页面重定向到vue.js中的text/html

10

将swf嵌入到html页面

12

如何将整个html文件嵌入到JS中

115

如何将代码作为HTML嵌入到vue.js中

10

将整个HTML页面存储到jQuery变量中

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文