用delphi来实现netstat -an功能
调用winexec()
我在前面贴过这样的帖子
你去看看

解决方案 »

  1.   

    局域网内,一个HUB连60台客户机,3台服务器。我想编个程序在服务器上监控各台客户机的情况,比如Client1是否开机等。而且在客户机上我也想知道哪一台服务器到底开机没有 , 在Client1 又想知道 Client2是否也开机?
      

  2.   

    写一个“客户-服务器”发送消息。可以借鉴WIN2000里的网络连接。
      

  3.   

    在 server ping client
    在 client ping server
      

  4.   

    这确实是一个问题,我以前也碰到过,当时也没有解决。前面各位提出的、通过在Delphi中调用 ping 或 netstat -an 方法,虽然可以试一试,但做起来问题还会很多,例如1。怎样从返回的一系列文本中确定出需要的信息?用命令ping 或 netstat -an 所返回的文本信息,本来是提供给人看的,现在则要被您的程序所知道,这就要麻烦多了。2。怎样在原有的GUI界面中,插入由命令行命令所返回的文本行信息?并在其中提取您要的信息后,再消了它?我想,即使上面的都可能做到,程序的界面会被弄的很乱,时间也会被拖得很长。所以,我认为较好的办法,应是直接利用WinSocket的某些属性和方法来实现。我现在大体已想出的一个办法,就是:测试连接的时间,若连接超时,就可确定对方没有开机。但此想法至今没有实际试验过,另外也存在一些问题,所以仅供参考。在局域网上,当服务器没有开机时,则任何一个客户端与它连接时,都会化很长时间(我以前测到的是45秒,这一参数可能有办法设置),然后出现一个出错信息。而当服务器打开时,则客户端与它连接时都会化很快成功(我以前测到的都在1秒以内)。利用这一事实,我们可以在连接之前,启动一个timer,并定时为1秒(也可更长点),然后开始连接。若连接成功(ServerSocket的connected事件发生),就将timer关掉(disable),这样定时器的onTimer事件就不再会出现;如到1秒后还未连接成功,则定时器onTimer事件出现,就可以判定Server未开机,就不必再空等几十秒的时间了,同时在onTimer事件的处理程序中,关掉timer自己。剩下的最后一个问题是:如何撤消已发出的连接(请求)?是否存在撤消连接请求的方法?如果不能撤消已发出的连接请求,是否有办法避免几十秒后出现的连接出错信息的显示?我看到一本书讲到‘取消连接’的说法,但它没有提供实现的手段。我现在怀疑,发出的连接请求能撤消吗?我估计是不可能的!WinSockt提供的方法中,似乎只有disconnect有些像,但它实际上并不是撤消已经发出而没有完成的连接请求,而是用来断开已成功的连接。所以,我想,唯一的办法是如何使连接出错信息不显示出来,但这一点我还没有找到答案。如果有某一Windows语句能做到,则将它加入OnError事件的处理过程中就可以了。
      

  5.   

    这个问题的解决方法很简单,将HUB换成可网管的交换机就可以了
      

  6.   

    zhang21cnboy(沧桑男人) :
    我们想知道的,是对方是否已打开机器。这是在通信之前做的握手工作,还谈不到真正的通信呢!
      

  7.   

    关注呀!
    zhang21cnboy(沧桑男人)如你所说的,很容易,但大概使用者没你那么有耐心!