金秋十月重磅技术文——网络编程大揭秘

python做软件二次开发好吗_利用Python二次开发Creo 胡迪 罗辉摘要: Creo软件的二次开发工作逐渐得到人们的重视,但其并未直接提供Python的开发接口。该文介绍了在利用Creo VB API接口的基础上,简便利用Python使用Python对Creo进行二次开发的方法和关键技术。以批量关系操作为例,对该方法进行了验证,结果表明该方法简化了Creo二次开发的过程。关键词:Creo;二次开发;Python;VB API中图分类号:TP393 ... 阅读详情

目录

  • 1、网络编程的基本概念
  • 2、IP地址及端口号
  • 3、通信协议
  • 4、TCP通信代码实践
    • 4.1消息传递
    • 4.2文件上传
  • 5、UDP通信代码实践
    • 5.1 UDP实现消息发送
    • 5.2 使用UDP循环发送和接收消息
    • 5.3使用UDP实现聊天

1、网络编程的基本概念

引例

在学习网络编程之前,我们先看这样一个例子。一般处于我们这个年龄段的同学,大都经历过写信/寄信的经历,在写信的时候,我们一般都需要明确发送的地址、联系人信息以及所在地区的邮编,邮递员可以根据这上面的信息找到接收信件的人,接收人在阅读过信件的内容后可以以同样的方式回信,这样就使得身处异地的朋友间可以进行通信。

在这种情况下,身处异地的朋友如果要进行通信,必须同时满足以下条件

1.接收人的所在地区及详细的住址

2.需要有快递员接收并发送

慢慢的,随着科技的发展,我们有手机通信、QQ聊天和微信聊天等多种通信方式,采用这些方式我们可以更便捷的进行通信,但是无论是那种方式,通信过程中总是需要这样两个元素:地址及传输过程。

在网络通信中,这两个元素可以使用更专业的名词来代替:

1、IP地址和端口号

IP地址可以帮助我们找到通信的接收方,端口号则可以帮助我们找到计算机中的具体应用,如QQ、微信等

2、传输协议

协议是为了帮助我们更好的进行传输,如TCP、UDP、FTP、SMTP和HTTP协议等

2、IP地址及端口号

IP地址是互联网协议地址,它是一种统一的地址格式,互联网中的每一台主机都会有一个逻辑地址。在计算机网络中,localhost(意为“本地主机”,指“这台计算机”)是给回的一个标准主机名,相对应的IP地址为127.0.0.1

通过IP地址,我们就可以连接到指定的计算机了,但是如果要访问目标计算机中的某个应用程序,还需要知道端口号。在计算中,不同的应用程序就是通过端口号来进行区分的。

在网络编程中,可以使用InetAddress进行主机名解析和反向解析,即给定确定的主机名,返回确定的IP地址;给定IP地址,返回主机名

localhost解析为127.0.0.1

127.0.0.1反向解析为localhost

NOTE:不同协议的端口是可以重复的,如UDP和TCP

端口的查询操作

netstat -ano #查看所有的端口
netstat -ano | findstr "XXX" # 查看指定的端口

3、通信协议

IP地址及端口号解决了通信过程中的地址问题,但是在计算机中,我们还要解决如何通信问题,所谓通信就是计算机间如何交流,而通信协议就是将计算机双方遵循的一种规则和约定(如同普通话、英语),它可以通过通信信道将处于不同地理位置的设备连接起来,能够实现信息的交换和资源共享。

在计算机网络中,常用的协议就是TCP/IP,它是协议簇,由多个子协议组成了,如我们常见的TCP、IP、UDP、ARP等,我们主要讲解网络编程中常用的TCP、UDP和IP

  • TCP

TCP协议是一种传输协议,面向连接、可靠的、基于字节流的传输层通信协议

  • UDP

UDP是一种无连接的传输协议,无需建立连接就可以发送数据包

  • IP

IP协议整个TCP/IP协议族的核心,对上可载送传输层各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网等各种技术来传送。

TCP和UDP对比

TCP可以类比于打电话,它具有以下特点

  • 在数据传输前,需要建立连接(三次握手),所以连接稳定可靠
  • 有客户端、服务端的概念,客户端发送,服务端接收
  • 传输完成后,会释放连接(四次挥手)

UDP可以类比于发短信,它具有以下特点

  • 数据传输前,不需要建立连接,所以不可靠,不稳定
  • 客户端和服务端没有明确界限,客户端和服务端都可以进行收/发
  • 不需要建立连接,所以速度较快

4、TCP通信代码实践

TCP网络编程需要以下Java类

InetAddress:表示IP协议的地址,可以解析IP地址和主机名

Socket:实现客户端的套接字,建立连接,套接字就是两台机器间通讯的端点

ServerSocket:实现服务端的套接字

4.1消息传递

客户端

1.拿到服务端的地址及端口,InetAddress

2.建立Socket连接

3.发送消息

public class TcpClient {
    public static void main(String[] args) throws IOException {
        Socket socket=null;
        OutputStream os=null;
        try {
            //1、得到服务端的地址,端口号
            InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
            int port=9898;
            //2、建立Socket连接
          socket=new Socket(inetAddress,port);
            //3、发送消息
            os=socket.getOutputStream();
            os.write("hello,Simon".getBytes());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭资源
           os.close();
           socket.close();
        } 
    }
}

服务端

1.用ServerSocket设置自己的端口号

2.等待连接,Socket

2.1:可以等待一次连接,接收到消息后关闭

2.2:等待多次连接,用while(true)把等待连接的方法包裹起来,重复接收消息

3、获取发送端的消息

public class TcpServer {
    public static void  main(String[] args) throws IOException {
        ServerSocket serverSocket=null;
        Socket socket=null;
        InputStream is=null;
        ByteArrayOutputStream baos=null;
        try {
            //1、设置自己的端口号
            serverSocket=new ServerSocket(9898);
            //2、等待客户端的连接
            socket=serverSocket.accept();
            //3、读取客户端的消息
            is=socket.getInputStream();
            baos=new ByteArrayOutputStream();
            byte[] buffer=new byte[1024];
            int len;
            while ((len=is.read(buffer))!=-1){
                baos.write(buffer,0,len);
            }
            System.out.print(baos.toString());

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            baos.close();
            is.close();
            socket.close();
            serverSocket.close();
        }
    }
}

4.2文件上传

客户端

1.创建一个连接

2.创建一个字节输出流用于通信

创建一个文件输入流用于接收文件,然后将接收后的文件给字节输出流用于通信

3.输出结束后,调用shutdownInput方法通知服务端已经发送完毕

4.关闭连接资源

public class TcpFileClient {
    public static void main(String[] args) throws Exception {

        //1、创建连接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9987);
        //2、定义一个输出流用于通信
        OutputStream os = socket.getOutputStream();
        FileInputStream fis = new FileInputStream(new File("simon.png"));
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }
        //3、通知服务器,我已经结束了
        socket.shutdownOutput();

        //确定服务器接收完毕,才可以断开连接,这一段代码主要是接收服务端发出的结束信息
       InputStream inputStream= socket.getInputStream();
        byte[] buffer2=new byte[1024];
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        int len2;
        while ((len2=inputStream.read(buffer2))!=-1){
            baos.write(buffer2,0,len2);
        }
        System.out.print(baos.toString());
        //关闭连接
        baos.close();
        inputStream.close();
        os.close();
        fis.close();
        socket.close();

    }
}

服务端

1.创建一个连接用于等待客户端的接入

2.创建一个输入流

创建一个文件输出流,将输入流输出

3.关闭资源

public class TcpFileServerDemo02 {
    public static void main(String[] args) throws Exception {
        //设置端口号
        ServerSocket serverSocket=new ServerSocket(9987);
        //等待连接
        Socket socket=serverSocket.accept();
        //获取输入流
        InputStream is=socket.getInputStream();
        //文件输出
        FileOutputStream fos=new FileOutputStream(new File("snow.png"));
        byte[] buffer=new byte[1024];
        int len;
        while ((len=is.read(buffer))!=-1){
            fos.write(buffer,0,len);
        }
        //通知客户端接收完毕
        OutputStream os=socket.getOutputStream();
        os.write("我已经接收结束,你可以断开了".getBytes());

        //关闭资源
        fos.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

5、UDP通信代码实践

UDP不需要连接,但是需要知道对方的地址和端口号,主要用到了以下Java类

DatagramPacket:表示数据包,用于实现无连接分组传送服务

DatagramSocket:表示用于发送和接收数据报的套接字

UDP是不存在客户端和服务端的概念,但是为了编程模拟方便,我们假定存在客户端和服务端

5.1 UDP实现消息发送

客户端

  • 建立连接
  • 创建数据包
  • 发送数据包
public class UdpClientDemo1 {
    public static void main(String[] args) throws Exception {
        //1、建立连接(这个端口号是客户端的)
        DatagramSocket datagramSocket=new DatagramSocket(9888);
        //2、建立数据包
        String msg="hello,Simon";
        InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
        //数据,数据的起始位置,要发送的地址与端口号
        DatagramPacket datagramPacket=new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,inetAddress,9887);
        //3、发送数据包
        datagramSocket.send(datagramPacket);
        //4、关闭数据流
        datagramSocket.close();

    }
}

服务端

  • 建立连接
  • 接收数据
public class UdpServerDemo2 {
    public static void main(String[] args) throws Exception{
        //建立连接,开放的端口
        DatagramSocket datagramSocket=new DatagramSocket(9887);
        //接收数据包
        byte[] buffer=new byte[1024];
        DatagramPacket datagramPacket=new DatagramPacket(buffer,0,buffer.length);
        datagramSocket.receive(datagramPacket);
        //打印数据包信息
        System.out.println(datagramPacket.getAddress());
        System.out.println(datagramPacket.getPort());
        System.out.println(new String(datagramPacket.getData()));
        //关闭连接
        datagramSocket.close();
    }

5.2 使用UDP循环发送和接收消息

使用while(true)方法将客户端中的发送数据和接收数据包裹起来,只要当他们满足一定的条件时(如输入的字符串为"bye"),退出即可。这样就可以达到循环发送和接收消息。

客户端

public class UdpSend {
    public static void main(String[] args) throws Exception {
        //1、建立连接
        DatagramSocket datagramSocket=new DatagramSocket(9888);
        //2、创建数据包,从键盘输入
        InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
        int port=9887;
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
        while (true){
            String s=bufferedReader.readLine();
            DatagramPacket datagramPacket=new DatagramPacket(s.getBytes(),0,s.getBytes().length,inetAddress,9887);
            //3、发送数据
            datagramSocket.send(datagramPacket);
            if(s.equals("bye")){
                break;
            }
        }
        //4、关闭数据
        datagramSocket.close();
        }
}

服务端

public class UdpReceive{
    public static void main(String[] args) throws Exception {
        //1、建立连接
        DatagramSocket datagramSocket=new DatagramSocket(9887);
        while (true){
           //2、接收数据包
           byte[] buffer=new byte[1024];
            DatagramPacket datagramPacket=new DatagramPacket(buffer,0,buffer.length);
            datagramSocket.receive(datagramPacket);
            //3、断开连接
            byte[] data=datagramPacket.getData();
            String receiveData=new String(data,0,data.length);
            System.out.println(receiveData);
            if(receiveData.equals("bye")){
                break;
            }
        }
        datagramSocket.close();
    }
}

5.3使用UDP实现聊天

使用UDP实现聊天,则客户端和服务端(其实不存在客户端和服务端的概念)既需要接收信息也需要发送消息,这就需要多线程的支持了。

我们首先构造两个接收类和发送的线程类,然后构造俩个用户类进行通信。

发送类

public class TalkSend implements Runnable {
    DatagramSocket datagramSocket = null;
    BufferedReader bufferedReader = null;

    private int fromPort;
    private int toPort;
    private String toIp;

    public TalkSend(int fromPort,int toPort,String toIp){
        this.fromPort=fromPort;
        this.toPort=toPort;
        this.toIp=toIp;

        //1、建立连接
        try {
            datagramSocket = new DatagramSocket(fromPort);
            //2、创建数据包,从键盘输入
            bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        while (true) {
            try {
                String s = bufferedReader.readLine();
                DatagramPacket datagramPacket = new DatagramPacket(s.getBytes(), 0, s.getBytes().length, new InetSocketAddress(toIp,toPort));
                //3、发送数据
                datagramSocket.send(datagramPacket);
                if (s.equals("bye")) {
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        //4、关闭数据
        datagramSocket.close();
    }
}

接收类

public class TalkReceive implements Runnable{
    DatagramSocket datagramSocket=null;
    private int port;
    private String msgFrom;

    public TalkReceive(int port,String msgFrom)  {
        this.port=port;
        this.msgFrom=msgFrom;

        //1、建立连接
        try {
            datagramSocket=new DatagramSocket(port);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    @Override
    public void run() {
        while (true){
            try {
                //2、接收数据包
                byte[] buffer=new byte[1024];
                DatagramPacket datagramPacket=new DatagramPacket(buffer,0,buffer.length);
                datagramSocket.receive(datagramPacket);
                //3、断开连接
                byte[] data=datagramPacket.getData();
                String receiveData=new String(data,0,data.length);
                System.out.println(msgFrom+": "+receiveData);
                if(receiveData.equals("bye")){
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        datagramSocket.close();
    }
}

用户类1

public class TalkStudent {
    public static void main(String[] args) {
        new Thread(new TalkSend(7777,9999,"localhost")).start();
        new Thread(new TalkReceive(8888,"小包")).start();
    }
}

用户类2

public class TalkTeacher {
    public static void main(String[] args){
        new Thread(new TalkSend(5555,8888,"localhost")).start();
        new Thread(new TalkReceive(9999,"小郎")).start();
    }
}

觉得此文写的还不错的朋友可以转发+关注下小编哦,持续分享技术系列文章中!

推荐阅读

华为18级大牛原来是这样理解网络协议的(附视频讲解)

Python 开发 creo 详细版 Button(win, text="退出", command=win.quit).grid(row=3, column=2, sticky='E', padx=5, pady=5)Button(win, text="导出", command=convert).grid(row=3, column=0, sticky='W', padx=5, pady=5)Label(win, text="要导出的文件").grid(row=1, column=0, sticky='W') 阅读详情

相关推荐

creo二次开发python_使用C#/.net语言进行ProE/Creo二次开发

随便哪个版本的Visual studio设置系统环境变量通常这个环境变量在安装ProE的时候如果选择安装VBAPI就会自动设置注意32位和64位操作系统路径是不同的。我的是64位操作系统。然后在VS Project里添加引用。以前叫ProE,现在叫Creo。然后在代码里加入命名空间using pfcls;之后就是启动或者连接ProE进程。我比较喜欢开着ProE调试,所以就用连接。var cAC =...

weixin_27031001的博客 2万+

Creo二次开发的心路历程

对于Creo二次开发,很早之前就想尝试,之前也是尝试了很多次,但是都以失败告终。究其原因: 1.可参考的资料太少,只有官方文档和少的可怜的一些入门资料,而且大多数开发都是基于Visual Studio,而VS对于我这个非专业人士过于复杂,光是toolkit入门都很难,连自带的示例都编译不过。 2.官方文档都是纯英文,而且需要一定的编程基础。对于基础并不扎实的我,在一开始根本看不懂 由于上述的种种原因,导致了我一次有一次的尝试,然后又一次有一次的失败,直到我发现......

sinat_27990067的博客 2万+

自动化操作creo的利器

官网 http://www.creoson.com/ 支持多种库,有python库 文件另存为方法是 file_backup import creopyson import requests, json, time c = creopyson.Client() c.connect() # print(c.server) # print(c.sessionId) # print(c.creo_pwd()) print(c.creo_cd('H:\cero')) print(c.creo_list_dir

nongcunqq的博客 2642

creo python api

【代码】creo python api。

nongcunqq的博客 1971

Python自动化操作Creo的5个实用技巧(附代码示例)

本文分享了5个Python自动化操作Creo的实用技巧,包括环境配置、文件批量处理、模型参数管理、工程图输出和高级错误处理。通过代码示例演示如何利用Python提升Creo工作效率,特别适合工业设计和机械工程领域的开发者。

weixin_26757939的博客 597

Creo编程接口详解

Pro/Toolkit是Creo最早提供的编程接口之一,它是一个C语言库,允许开发者直接访问Creo的核心功能。Pro/Toolkit提供了大量的函数和数据结构,可以实现从建模到分析的各种任务。由于其底层和高性能的特点,Pro/Toolkit非常适合需要高性能和低延迟的应用场景。Creo Parametric API是Creo提供的另一种编程接口,它基于C++,提供了更加高级和易用的开发方式。

kkchenjj的博客 1665

用 Python 内置模块处理 ini 配置文件

简介开发人员每天都在处理一些大型而复杂的项目, 而配置文件会帮到我们并节省不少时间。在处理配置文件过程中,无需更改源代码本身,只需要调整配置文件即可访问不同的API接口、更新基础URL信...

Python中文社区 472

Creo二次开发案例分析

通过以上几个案例,我们可以看到Creo二次开发在实际工程中的广泛应用。无论是自动化设置参数、生成工程图纸、批量生成装配体、生成设计报告,还是生成制造指令,都可以通过编写Python脚本和使用Creo的API来实现。这些脚本不仅提高了设计和生产的效率,还减少了人为错误,确保了设计的准确性和一致性。希望这些案例能为读者提供实际的参考和帮助,进一步提升Creo二次开发的应用水平。

kkchenjj的博客 2441

探索创新:`creo_toolkit` - 提升 Creo 设计效率的新利器

探索创新:creo_toolkit - 提升 Creo 设计效率的新利器 去发现同类优质开源项目:https://gitcode.com/ 项目简介 在GitCode上,我们发现了一个名为creo_toolkit的开源项目,它是专为PTC Creo设计者打造的一套强大工具集。如果你是 Creo 的忠实用户,那么这个项目将帮助你提升工作效率,实现更高效、更智能的设计工作。 技术分析 creo_to...

gitblog_00054的博客 984

Creo二次开发语言选择

Pro/Toolkit、J-Link、Creo Python API和Creo ProProgram各有优缺点,开发人员应根据项目的具体需求和自身的技能水平进行选择。Pro/Toolkit提供了大量的函数和数据结构,可以直接操作Creo的内部数据模型,实现复杂的功能和定制化的解决方案。:根据项目的需求选择合适的语言,例如需要高性能计算时选择Pro/Toolkit,需要快速开发时选择Creo Python API。下面是一个简单的Creo Python API示例,展示如何在Creo中创建一个立方体。

kkchenjj的博客 1939

creo二次开发中各种遍历封装

creo二次开发中各种遍历封装.还有数组的封装(仿vector).常用的封装有ProSolid ProFeature ProPoint ProCsys ProAxis

AI4CAD:用python+creo实现批量参数建模(creo二次开发示例)

摘要: 本文探讨了Python与Ceroson结合实现Creo二次开发的方案,对比了传统Cero(C++)与Ceroson(REST API)的适用场景。Ceroson通过HTTP接口将Creo功能暴露为服务,配合Python可实现参数化建模、批量处理和系统集成,显著降低开发门槛。文章详细介绍了Ceroson版本特性(推荐v2.8.2或v3.0.0),并演示了连接配置方法。核心案例包括通过Python读取特征树(获取模型骨架结构)和批量参数化建模,展示了该方案在企业自动化流程中的高效性。

heimaoaitangguo的博客 4001

利用Python二次开发Creo.pdf

利用Python二次开发Creo.pdf

JAVA 判断Socket 远程端是否断开连接

如何判断 Socket 远程端连接是否关闭,如果关闭的话,就要重建连接Socket的类提供了一些已经封装好的方法, 如 isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,在测试时发现,这些方法都是本地端的状态,无法判断远端是否已经断开连接。

猿大师 3177

深入解析SSD报错“READ FPDMA QUEUED”:从诊断到修复全流程

本文深入解析了SSD报错“READ FPDMA QUEUED”的含义、成因与全流程解决方案。该错误通常指示硬盘硬件或健康状态问题。文章详细介绍了如何通过系统日志定位错误、解读关键的S.M.A.R.T.健康报告(重点关注重分配扇区计数等指标),并逐步进行硬件排查(如更换SATA数据线)、软件修复与数据抢救,最终指导用户根据诊断结果做出维修或更换SSD的决策。

weixin_29233333的博客 398

Sigrity IBIS建模实战:如何用T2B工具快速转换SPICE模型(附避坑指南)

本文详细介绍了如何使用Sigrity T2B工具将SPICE模型高效转换为IBIS模型,涵盖从环境配置、模型预处理到转换流程和验证策略的全过程。通过实战案例和避坑指南,帮助硬件工程师掌握高速电路设计中的IBIS建模技术,提升信号完整性分析效率。

weixin_29243279的博客 395

java Socket判断对方是否已关闭连接

如何判断远端socket是否已经断开连接,如果断开那么需要重新连接。 1通过socket类的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,这些方法都是本地端的状态,无法判断远端是否已经断开连接。 2通过OutputStream发送心跳消息,如果发送失败就表示远端已经断开连接,类似

B_H_L的专栏 1万+

【win11 cuda12.0安装tensorflow-gpu】

win11 cuda 12.0 安装 tensorflow-gpu

weixin_36299320的博客 3009

python开发Creo20250528-获取工作目录下的文件列表信息

摘要:文章展示了如何将VB代码转换为Python实现文件列表功能,并改进为生成文本文件输出。主要内容包括:1) 将VB的PRT文件枚举功能转为Python实现;2) 添加错误处理和消息提示;3) 改进版本将文件列表写入UTF-8编码的文本文件并自动打开;4) 提及参考了Deepseek+Cheerystudio本地知识库搭建方案。最终代码实现了在工作目录中查找最新PRT文件,并将结果列表保存为prt_files.txt文件后自动打开展示的功能。

ISDF工软未来 792

极验验证码: 一点即过验证(鼠标轨迹分析)

2、第一个验证接口分析(第一个w值还原) 3、第二个验证接口(第二个w值还原)这里定位w生成跟上篇文章一样,就不展开了;主要分析tt值(鼠标轨迹)的生成逻辑

qq_49268524的博客 1009

【WorkBuddy专栏09】WorkBuddy多模态能力深度揭秘

【WorkBuddy专栏09】AI不止会聊天——WorkBuddy多模态能力深度揭秘

AI人人懂 2107

从Python到C++:一个Creo二次开发小白的真实踩坑与通关指南(附完整VSCode配置)

本文分享了从Python到C++的Creo二次开发实战经验,详细介绍了如何通过Python+VBApi快速入门,并逐步过渡到C++开发。重点解决了VS复杂配置问题,提供了VSCode+nmake的轻量级开发环境搭建指南,帮助开发者高效实现Creo插件开发。

weixin_30562507的博客 665

【ESP32接入国产大模型之Deepseek】

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之Deepseek。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘鸣谢B站UP星汇极客ESP32对接DeepSeek API,实现AI大模型交互功能。

vor234的博客 1万+

四路 CAN 转 4G 网关

SG‑CAN‑4G‑410 为**四路隔离 CAN 转 4G 工业网关**,把 CAN2.0A/B 报文封装成 TCP/UDP 报文,通过 4G 无线网络实现 CAN 总线远程监控、远程控制。四路 CAN 相互独立;以太网仅用于本地配置,不做业务数据传输;支持移动 / 联通 / 电信 4G 网络。

S2003120416的博客 160

Open3D 使用RANSAC分割平面【2026最新版】

使用RANSAC从点云中分割平面,用segement_plane函数。博客长期更新,本文最新更新时间为:2026年2月28日。

点云侠的博客 37万+

【异常】安装hermes-agent提示Git克隆仓库网络中断 fetch-pack: unexpected disconnect while reading sideband packet

本文分析了Git克隆仓库时出现网络中断错误的常见原因及解决方案。报错表现为连接被远程主机关闭、管道破裂或数据包意外终止,通常由网络不稳定、仓库过大或配置不当引起。提供了5种优先级排序的解决方法:1)使用浅克隆减少数据量;2)优化Git配置参数;3)切换网络或配置代理;4)检查SSH密钥设置;5)改用HTTPS方式克隆。特别推荐先尝试「浅克隆+HTTPS」组合方案快速验证,若问题持续再根据具体报错深入排查。文中包含详细的命令示例和配置说明,适合不同网络环境下的Git用户参考。

奶爸的编程之路,也就一周冷个三天 1418
上一篇: 十月一休假在家喜获987页的程序员面试宝典,看完才发现技术不是很好也可以进大厂!
下一篇: 十月一假期旅游完突然收到(余额宝)面试,四面成功拿下offer
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值