文章目录

  • 什么是socket
  • socket基本使用
  • 在HM中实现socket通信
    • 运行在HM上的服务端tcl代码
    • 外部程序上的客户端tcl代码

  扫描下方二维码关注我的微信公众号 - CAE软件二次开发Lab,查看更多精彩文章!


CAE软件二次开发Lab


  实现外部调用HM进程完成命令传输与执行,我们可以采用socket接口实现外部程序与HM主程序进行通信来实现。

什么是socket

  1. socket即为套接字,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一的标识网络通讯中的一个进程,“IP地址+TCP或UDP端口号”就为socket。

  2. 在TCP协议中,建立连接的两个进程(客户端和服务器)各自有一个socket来标识,则这两个socket组成的socket pair就唯一标识一个连接。

  3. socket本身就有“插座”的意思,因此用来形容网络连接的一对一关系,为TCP/IP协议设计的应用层编程接口称为socket API。

socket基本使用

  1. socket 服务端开启
    格式:socket –server command ?options? port
    -server :表明开启的是服务器端
    port:端口
    command:当有客户端来连接的时候,执行这个过程,这个过程有三个参数
    channel:给新客户端的通道
    address:提供给客户端连接的 ip 地址
    port:端口

  2. 客户端连接服务器端
    格式:socket ?options? host port
    host port :客户端连接的服务器 ip和端口

在HM中实现socket通信

运行在HM上的服务端tcl代码

  如下服务端代码,保存为server.tcl。

# 服务端代码proc accept {chan addr port} {# 执行客户端发送的命令,当命令执行成功则返回pass、失败返回failif {[catch {eval [gets $chan]}]} {puts $chan fail# 命令执行失败} else {puts $chan pass# 命令执行成功}close $chan
}
socket -server accept 23456
# 开启端口服务器为23456的socket服务

  打开HM,菜单File -> Run -> Tcl/Tk Script,选择server.tcl,点击【打开】按钮。

外部程序上的客户端tcl代码

  如下为实现与服务器通信的客户端tcl代码。

# 客户端代码
proc submit {cmd id {ip 127.0.0.1}} {# 向客户端发送命令, 默认为本地set chan [socket $ip $id]# 客户端连接服务器端口puts $chan $cmd# 发送命令flush $chan# 刷新通道缓存set status [gets $chan]close $chan# 关闭连接if {$status == "pass"} {"命令执行成功"} else {"命令执行错误"}
}set cmd "*createentity comps name=new"
# 发送一个在hm中新建名称为new的组件的命令字符串
submit $cmd 23456
# 向客户端发送命令

  寻找一个可以运行tcl脚本的编译器,例如可以直接用hypermesh中的tcl编译器,其目录为HM安装目录\hw\tcl\tcl8.5.9\win64\bin下的tclsh85.exe,运行后将上述客户端tcl代码复制到tcl编译器窗口。

  在tcl85sh.exe窗口执行命令后,显示执行成功。如下:

  打开hm可以看到已经创建了new组件。

HM二次开发 - 外部程序采用socket与HM实现通信相关推荐

  1. ANSA二次开发 - 外部程序采用socket与ANSA实现通信

    实现步骤如下: 在ANSA Script Edit中运行服务端代码: # 服务端代码socket_server.pyimport socket import os import sysdef work ...

  2. HM二次开发 - Data Names及其使用

    文章目录 Data Names介绍 数据名(Data Names)的使用 创建实体(Entity)时使用Data Names 设置实体(Entity)的参数值 获取实体(Entity)的参数值   扫 ...

  3. 语音模块LD3320模块的二次开发,并与树莓派进行串口通信

    一.首先模块介绍 (1)参数详解 型号:YS-LDV7 名称:一体化语音识别模块 规格:43*29.7MM 供电电压:5V (内部工作电压 3.3V) 待机电流:30MA 识别时电流:45MA IO ...

  4. UG NX二次开发(C#)-装配-添加组件AddComponent

    在UG NX的使用过程中,装配是很重要的一环,本文是为了实现组件的批量装配,采用UG NX二次开发,采用的主要函数为AddComponent. AddComponent()的帮助说明如下: 其是属于N ...

  5. Java编写一个cfd画图软件_starccm+二次开发与java技术(1)

    STARCCM+的二次开发可以采用向导式开发和宏命令开发等. STARCCM+提供了整套的API及丰富的java库,即可以开发算法,也可以开发用户界面.使用STARCCM+向导开发包可以开发各种专用c ...

  6. 新酷卡 mysql接口_新酷卡M池二次开发模块数据库操作版

    有大神发了一个soket方式的,尝试继承到模块后发现soket不太适合放到易模块类内, 客户组件不支持放在类内,必须放在界面上,传入赋值类内客户变量,收到数据事件也没办法放在类内,放弃 远程服务支持库 ...

  7. 对数周期天线hfss建模_HFSS软件二次开发在对数周期天线设计中的应用

    1 前言 目前,仿真软件ANSOFT HFSS的计算精度和效率不断提高.但是要建某些阵列天线或其他复杂函数线构成的天线,操作工作量会增大,检查错误和修改模型都较困难.HFSS提供了基于VBScript ...

  8. revit二次开发——初谈开发

    5G时代的来临,将会对社会产生许多冲击和变革,其中建筑行业就是其中之一. 建筑行业正在经历从传统的方式走向数据化的施工,带来这种变化的正是BIM建筑概念和5G大数据互联. 我们回到revit二次开发, ...

  9. lisp创建PaletteSet_CAD二次开发(.NET)之PaletteSet和Palette

    在CAD中经常用到停靠或浮动的PaletteSet,比如:特性.图层特性管理器.工具选项板等(以下截图来自AutoCAD2010界面). 特性PaletteSet(停靠) 图层特性管理器Palette ...

最新文章

  1. mysql延迟解决方案
  2. 【SQL提数】case..when..then..end的使用
  3. Android Handler研究(1)
  4. Spring Cloud Alibaba:Sentinel 流控规则
  5. windows和linux互传文件,用户配置文件和密码配置文件,用户和组管理
  6. 40、使用javassit操作运行时字节码文件
  7. 通用DbContext封装
  8. 科研热点|中科院文献情报中心:2022分区表即将发布,这几大变化值得关注~
  9. 普林斯顿微积分读本篇三:极限导论
  10. 智能化系统工程施工阶段划分
  11. Python 3.7.1 模块 文本处理 正则表达式 re
  12. 剑指offer算法题028:数组中出现次数超过一半的数字
  13. 弘辽科技:618年中大决战,拖词拖价法快速玩转淘宝直通车
  14. 什么是SQL注入攻击?SQL注入攻击的危害以及防护
  15. stc89c52 单片机 修改头文件
  16. ROS同时订阅多个话题 Python
  17. winForm欢迎界面
  18. 安全终端模拟软件——Xshell
  19. AHCI协议阅读笔记
  20. 调频连续波(FMCW)SAR星上实时处理调研

热门文章

  1. big sur 虚拟机 网络_推荐收藏系列:一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问题...
  2. 再见Excel!最强国产开源在线表格Luckysheet走红GitHub
  3. 墨染の軍師(シオン) / 墨染(异时层火刀)
  4. sed 注释行的 方法
  5. 使用VMware测试U盘启动盘是否制作成功
  6. 茅台与小米搞饥饿营销?
  7. 伯努利朴素贝叶斯【机器学习算法一朴素贝叶斯2】
  8. 为什么初等矩阵左乘相当于行变换,右乘相当于列变换
  9. 使用source导入MySQL出现“ERROR: Failed to open file xx, error: 2“问题的解决
  10. python篮球游戏单机下载_NBA 2K20