如何跨越不同的电脑执行程序(1)

这个问题看起来很简单,可惜一般人没这需求,所以没有找到这种功能的软件。那就自己动手吧,不料这却是一个深坑。好吧,我网络知识比较匮乏。。

为什么我会有这种需求呢?我电脑系统是win7的,然后用vmware装了个苹果系统,我想在vmware中操作苹果系统的时候能够一键切换win7中正在播放的歌以及调整调整win7的音量,而不是先要从虚拟机中释放控制(默认应该是按ctrl+alt),然后才能给win7发送热键。

很显然,要实现这种需求,最简单的方法就是通过网络来发送信号,然后由接收方解析这个信号,根据解析出的内容执行不同的程序。

用什么方法来发送信号呢?首先我想到的就是用ruby来实现,因为我刚看了松本行弘的 "代码的未来" 这本书,里面 "4.4节 进程的通信" 中讲到了socket套接字编程,正好可以用在这里。哈哈,看起来运气还不错!谁知却是苦难的开始。。

ruby最简单的socket客户端服务器代码在网上很容易搜到,ruby解释器的话苹果系统自带,win7需要自己下,这些都很简单。

首先我在苹果跑了socket客户端服务器,一切ok。然后我把服务器放在win7,客户端放在苹果,噩梦出现了,客户端无法连接服务器,显示

`initialize': Connection refused - connect(2) (Errno::ECONNREFUSED)

,我以为是我哪里设置错了,就互换客户端服务器,也就是把服务器放到苹果,客户端放到win7,结果一下就连上了,刷刷的。这样我就奇怪了,防火墙啥的我也关了啊,没道理。最后我又试了把socket客户端服务器都放在win7,连不上,囧了。弄了半天还是搞不定,咋办哩,换软件吧。于是我想到了python,这个貌似也挺简单的。上网搜起,很快就弄到了代码,一试,吐血,跟ruby一模一样的结果。。好吧,此时我内心千万只草泥马奔腾而过。

我失败了,过了一个月后,我又不甘心的试了一下,毫无疑问还是失败。不过这次我有点头绪了,因为我前段时间知道了有个监听主机的概念,我怀疑是win7的监听主机有问题,那么要如何确认这一点呢?上网求之,嗯,很好,用下面这条命令可以查到所有当前监听的端口

netstat -an |find /i "listening"

我输入了这个命令,找到了我程序中使用的60000端口对应的行

TCP    [::]:60000             [::]:0                 LISTENING

汗,我发现我不明白这是啥意思,这到底代表监听了哪些主机呢?这诡异的符号上网也查不到好不好,肿么办,我凌乱了。

我在网上搜啊搜,突然看见有人说这种情况可以用nc这个软件扫描一下端口,也就是在苹果上用nc扫描win7上特定的端口是否开放,指令如下:

nc -z win7的ip 60000

如果win7监听的主机包括苹果,则会显示下面这行

Connection to win7的ip port 60000 [tcp/*] succeeded!

否则啥也不会显示(nc也可以扫描本机的端口,ip使用127.0.0.1就行了。不过我发现win7上的nc啥也扫不出来,扫本机或外部机器都啥也不会显示,原因尚不明)。

于是我试了一下,果然啥也没显示,那么,问题已经很明显了,win7的服务器压根就没监听苹果,难怪会显示连接被拒绝。

问题找到了,可是我捣鼓了半天也没发现怎么能让win7监听苹果。无奈,只好另想它法了。

此条目发表在 ., 语言与设计 分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>