WSL2和Windows之间通信实现【以Unity为例】

news2024/9/20 22:26:39


WSL2可以视为一个独立的虚拟机,具有自己独立的IP地址,通过虚拟路由器与Windows连接,因此WSL2不能直接访问到Windows的主机地址,需要动态获取。

(1)Windows启用防火墙的WSL2的访问

默认情况下Windows的防火墙会阻止WSL2中应用对Windows的网络访问(see: Add "allow" rule to Windows firewall for WSL2 network · Issue #4585 · microsoft/WSL (github.com)),解决办法是添加一条防火墙规则允许WSL2对Windows的访问。请以管理员身份打开PowerShell并键入以下命令:

PS C:\> New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

查看防火墙的高级设置中的入站规则:

其实也可以直接关闭所有防火墙。

(2)WSL2获取Windows的IP地址并建立连接

由于Windows相对WSL2的IP会发生变化,我们需要每次启动前先获取这个IP来保证顺利访问

import numpy as np
import socket
import os

def connect_unity(host,port):
    global sock
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host, port))
    print('连接已建立')

import subprocess
cmd_get_ip = 'grep -oP  "(\d+\.)+(\d+)" /etc/resolv.conf'
host = subprocess.run(
        cmd_get_ip, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True
        ).stdout.strip() # 获取windows的IP
 
port = 5005        # Unity监听的端口号

connect_unity(host,port)

WSL2的IP Address:

$ip a |grep "global eth0"

输出得到:

WSL2的IP地址就是:172.18.119.46

(3)使用Unity监听和连接

使用了0.0.0.0进行监听,相当于监听本机上所有的IP地址

public class U2P
{  
    private U2P()
    {
        serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPAddress ipAddress = IPAddress.Parse("0.0.0.0");
        serverSocket.Bind(new IPEndPoint(ipAddress, 5005));
        serverSocket.Listen(5); 
        StartServer();
    }
    private void StartServer()
    {
        serverSocket.BeginAccept(AcceptCallback, null);
    }
    private void AcceptCallback(IAsyncResult ar)
    {
        Socket sc = serverSocket.EndAccept(ar); 
        if (clientSocket == null)
        {
            clientSocket = sc; 
            isConnected = true;
            Debug.Log("连接成功");
        }
    }
public float[] RecData()
    {
        try
        {
            if (clientSocket != null)
            {
                int canRead = clientSocket.Available;
                byte[] buff = new byte[canRead];
                clientSocket.Receive(buff);
                string str = Encoding.UTF8.GetString(buff);
                //Debug.Log(str);
                if (str == "")
                {
                    return null;
                }
                //str = str.Replace("[","").Replace("]","").Replace("\n")Replace("Replace(
                //Debug.Log(“接受消息:”+ str);
                string[] strData = str.Split(',');
                float[] data = new float[strData.Length];
                for (int i = 0; i < strData.Length; i++)
                {
                    data[i] = float.Parse(strData[i]);
                }
                //Debug.Log("数据:"+data[7]);
                return data;
            }
        }
        catch (Exception ex)
        {
            Debug.LogError("发生错误:"+ex);
            if (clientSocket != null)
            {
                clientSocket.Close(); 
                clientSocket = null; 
                isConnected = false;
                StartServer();
            }
        }
        return null;
    }
    public void SendData(List<float> data)
    {
        try
        {
            if (clientSocket != null)
            {
                string strData = "";
                for (int i = 0; i < data.Count; i++)
                {
                    strData += data[i];
                    if (i != data.Count - 1)
                    {
                        strData += ",";
                    }
                }
                // 请补充使用UTF8编码,使用clientSocket发送strData到服务器的代码
                byte[] dataBytes = Encoding.UTF8.GetBytes(strData);
                clientSocket.Send(dataBytes);
            }
        }
        catch (Exception ex)
        {
            //Debug.LogError("发生错误:”+ex);
            if (clientSocket != null)
            {
                clientSocket.Close();
                clientSocket = null;
                isConnected = false;
                StartServer();
            }
        }
    }
}

参考:

https://mp.csdn.net/mp_blog/creation/editor?spm=1000.2115.3001.5352

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

陆奇-奇绩创坛-chatGPT新范式,新时代,新机会

奇绩创坛-新范式&#xff0c;新时代&#xff0c;新机会 01-新范式 新范式的新拐点 新范式的历史环境 新范式的社会影响 新范式的缔造者&#xff1a;Sam Altman和OpenAI 新范式的动力引擎 新范式的演化路径 02-新时代 新时代的宏观发展格局 新时代的中国机会 新时代的OpenAI生…

个人复盘和总结 2022——2023

个人心路历程&#xff1a; 从2022年开始接触编程到现在已经断断续续的有一年了。回顾这一年&#xff0c;感觉有进步也有做的不足的地方。好的是从一开始的什么都不会&#xff0c;到现在的至少对计算机有点了解&#xff0c;从C语言到c到Linux系统编程再到Linux网络编程&#xf…

圆桌对话|数字孪生圆桌会议精彩回顾:跨越挑战,迎接机遇

4月20日&#xff0c;以“数实融合&#xff0c;韧性生长”为主题的袋鼠云春季生长大会圆满落幕。本次大会开展了精彩的圆桌会议&#xff0c;在圆桌上&#xff0c;易知微邀请了中国特种设备检测研究院主任&正高级工程师邓贵德、北京中创碳投科技有限公司首席科技官唐进、浙江…

51单片机的中断系统

文章目录 51单片机的中断系统一、中断系统简介程序中断中断可以实现的主要功能中断执行过程 二、51单片中断系统使用中断源中断控制中断允许中断判优中断函数定义 三、中断系统使用案例例一:P3.2 引脚上接了一个按键&#xff0c;P0口连接了8个发光二极管&#xff0c; 要求每次按…

ASIC-WORLD Verilog(9)循环语句

写在前面 在自己准备写一些简单的verilog教程之前&#xff0c;参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好&#xff0c;奈何没有中文&#xff0c;在下只好斗胆翻译过来&#xff08;加了自己的理解&#xff09;分享给大家。 这是网站原文&…

java--ThreadLocal详解

目录 1.ThreadLocal的用途两个使用场景 1.1场景1 1.2两个线程分别用自己的SimpleDateFormat 1.3使用线程池创建1000个打印线程分别用自己的SimpleDateFormat 打印可以看到有很多处两个重复的日期 1.4加锁解决线程安全问题 1.5SimpleDateFormat小结 1.5更好的解决方案是使…

第5章:排序与分页

1.排序数据order by 1.1 排序规则 没有使用排序操作&#xff0c;查询返回的数据是按照添加数据顺序显示 ①&#xff1a;使用order by 子句排序&#xff0c;order by 子句在select语句的结尾 asc(ascend):升序 desc(descend):降序 ②&#xff1a;按照salary从高到低的顺序…

【Linux从入门到精通】Linux常用基础指令(上)

本篇文章会对Linux下的常用进行详细解释&#xff0c;并附加实例。通俗易懂&#xff0c;希望会对你有所帮助。由于内容较多&#xff0c;分为上下篇来讲解。 文章目录 一、什么是Linux的指令呢&#xff1f; 二、Linux下的常用指令 2、1 ls 指令 2、1、1 ls -a 2、1、2 ls -l 2、…

python开发构建基于CNN的人脸识别系统

卷积神经网络在图像处理领域中早就是独树一帜的存在&#xff0c;今天正好有时间就想着基于CNN开发构建一个人脸识别系统&#xff0c;首先看下效果图&#xff1a; 数据集来源于LFW数据集&#xff0c;简单看下本文使用的小批量的数据集如下&#xff1a; 一共有12个人的图像数据&a…

详解git(工作必备)

基本概念 Git 是一个开源的分布式版本控制系统&#xff0c;用以有效、高速的处理从很小到非常大的项目版本管理。 Git 的作用与好处是&#xff1a; 可以帮我们保存文件的所有修改记录&#xff0c;并且使用版本号进行区分&#xff0c;让我们随时可以浏览历史版本、对比不同版本…

Mysql列的完整性约束详解(设置表字段的非空约束(NOT NULL, NK))

设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 文章目录 系列文章目录一、设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 1.简介2.语句格式总结 一、设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 1.简介 当数据库表中的某个字段上的…

perf工具报错,升级ubuntu子系统linux内核

文章目录 1&#xff0c;运行perf工具报错1.1&#xff0c;可能的原因有&#xff1a; 2&#xff0c;我选择升级linux内核&#xff0c;和当前perf工具版本保持一致2.1&#xff0c;下载6.2.12内核源码2.2&#xff0c;安装6.2.12内核 1&#xff0c;运行perf工具报错 1.1&#xff0c;…

今天国际医药行业大型物流系统集成建设案例——广州医药智慧物流中心项目

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 近几年&#xff0c;带量采购常态化、制度化、医保支付方式改革、医保谈判药品“双通道”、线上购药医保结算等一系列政策加速药品流通行业变革步伐&#xff0c;由…

数据驱动的皮肤病变分类深度监测

文章目录 Data-Driven Deep Supervision for Skin Lesion Classification摘要本文方法Layer-Wise Effective Receptive Field (LERF)Object Size Approximation Using Activation MappingDeep Supervision Employment 实验结果 Data-Driven Deep Supervision for Skin Lesion C…

基于html+css的图展示33

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

15天学习MySQL计划-SQL优化/视图(进阶篇)-第八天

SQL优化 1.插入数据&#xff08;insert&#xff09; 1.批量插入 insert into 表名 values(值1,值2),(值1,值2),(值1,值2),(值1,值2) 2.手动提交事务 --查看当前提交的状态 select autocommit; --0代表手动提交 1代表自动提交 set autocommit 0; ​ commit #提交事务 3…

【计算机网络 - 第二章】应用层(更新中)

目录 一、应用层协议原理 1、网络应用程序体系结构 &#xff08;1&#xff09;客户/服务器模型&#xff08;C/S&#xff09; &#xff08;2&#xff09;P2P模型&#xff08;Peer-to-Peer&#xff09; 2、进程通信 &#xff08;1&#xff09;客户和服务器进程 &#xff0…

重载是什么?只有返回值类型不同算不算重载?为什么?

重载定义 首先&#xff0c;重载&#xff0c;从简单说&#xff0c;就是函数或者方法有相同的函数名&#xff0c;但是参数列表不相同的情形&#xff0c;这样的同名不同参数的函数或者方法之间&#xff0c;互相称之为重载函数或者重载方法&#xff0c;例子如下&#xff1a; 重载但…

机房一体化监测解决方案

随着5G、工业互联网等最新基建项目的扎实推进&#xff0c;我国数字经济发展也在不断开拓&#xff0c;很多地区也在积极建设新型信息基础设施&#xff0c;围绕规划、网络、用能等方面加大支持力度。在信息网络技术不断发展的背景下&#xff0c;各类网络设备机房广泛分布。但很多…

品牌商业笔记怎么写,投放笔记总结

小红书的用户当中有百分之五十以上都是来自一线城市&#xff0c;这证明着平台蕴藏着巨大的流量价值。这其中&#xff0c;品牌为了利益自然会去追求如何写商业笔记。今天就来和大家一起分享一下品牌商业笔记怎么写&#xff0c;在投放笔记的时候需要注意什么呢。 根据最新的数据显…