明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 710|回复: 9

[函数] ping一个IP(主机)是否能通

[复制链接]
发表于 2020-7-11 17:50 | 显示全部楼层 |阅读模式
;;ping一个IP(主机)是否能通
;;参数1:IP或主机名
;;参数2:等待时间(毫秒)
;;返回:可ping通返回T,超时返回nil
;;例子:(try-ping "baidu.com" 500)
(defun try-ping (IP time / exec ff file r str)
        (setq file (vl-filename-mktemp "try.txt"));不知临时文件路径有没有可能带空格
        (setq exec (vlax-create-object "wscript.shell"))
        (vlax-invoke exec 'run (strcat"cmd /c ping " IP " -w "(itoa time)" -n 1 > "file) 0  1)
        (vlax-release-object exec)
        (setq ff(open file "r") );读取临时文件
        (while(and(null r)(setq str(read-line ff)))
                (setq r(vl-string-search "(0%" str))
        )
        (close ff)
        (vl-file-delete file)
        (if r T)
)
(try-ping "baidu.com" 500)
(try-ping "192.168.1.1" 500)



写了个ping函数,用了cmd命令写入临时文件判断,不知道有没有更好的解决方案

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-7-11 20:23 | 显示全部楼层
OPENDCL 里有个浏览器控件,是 IE 7.0 ,从那里执行 JavaScript 是异步的哦,不会出现 500 毫秒的卡顿
 楼主| 发表于 2020-7-11 20:31 | 显示全部楼层
yxp 发表于 2020-7-11 20:23
OPENDCL 里有个浏览器控件,是 IE 7.0 ,从那里执行 JavaScript 是异步的哦,不会出现 500 毫秒的卡顿

这个异步没意义吧,至少要等待返回才能确定是否能通,还没连上怎么能确定,另外第4行最后一个参数改为0就能异步

点评

yxp
这个1好像不能改,改了就拿不到返回值了。CAD需要一直等待网络返回,而无法在网络返回后使用回调函数来显示结果。在等待期间,CAD 啥也做不了,所有菜单都会卡掉  发表于 2020-7-11 20:54
发表于 2020-7-11 20:40 | 显示全部楼层
本帖最后由 yxp 于 2020-7-11 20:51 编辑

还有个方法,自己的电脑建一个 IIS 服务器,或者 PHP 服务器都行,然后用 get 方法调用这个函数。调用 MSScriptControl.ScriptControl 组件可以在本机运行 js
因为单线程结构 AutoCAD 只要联网就会出现卡顿,安装完 CAD 优化性能的第一步就是干掉所有联网。
 楼主| 发表于 2020-7-11 21:27 | 显示全部楼层
yxp 发表于 2020-7-11 20:40
还有个方法,自己的电脑建一个 IIS 服务器,或者 PHP 服务器都行,然后用 get 方法调用这个函数。调用 MSSc ...

确实是,等待期间程序啥也操作不了,CAD好像就是个单线程的程序
发表于 2020-7-12 10:09 | 显示全部楼层
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator"))
(setq SVR (VLAX-INVOKE WMI 'ConnectServer))
(setq ping (vlax-invoke SVR 'InstancesOf "Win32_PingStatus where Address = 'www.baidu.com'"))
(vlax-for item ping (princ (vlax-get item 'StatusCode)) ) ;;StatusCode=0表示ping成功
(mapcar 'vlax-release-object (list wmi svr ping))
(princ)
 楼主| 发表于 2020-7-12 17:59 | 显示全部楼层
小菜123 发表于 2020-7-12 10:09
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator"))
(setq SVR (VLAX-INVOKE WMI 'ConnectSer ...

有没有办法设定等待时间,一旦不通就要等上5秒,太久了
发表于 2020-8-21 21:53 | 显示全部楼层
  多谢大神分享,学习一下!
发表于 2020-12-24 21:12 | 显示全部楼层
yxp 发表于 2020-7-11 20:40
还有个方法,自己的电脑建一个 IIS 服务器,或者 PHP 服务器都行,然后用 get 方法调用这个函数。调用 MSSc ...

可以运行js那就有很多好玩的js可以调用!:P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-23 14:50 , Processed in 0.299031 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表