1.客户端开启的时候检测和服务器的网络是否连通(局域网内)
  要求根据IP和服务器的计算机名二者都要检测
2.服务器上数据库的端口默认1433,我修改为了1500
  客户端打开的时候如何能检测到服务器上1500端口正常打开
昨天开始找上面2个功能点
好多垃圾贴,最后只找到了PING IP地址测试网络是否连通的
最好能给出上面2点要求的完整解决方案,
源码当然更好

解决方案 »

  1.   

    无论服务器是否是开着的,只有服务程序运行了才表示服务器能正常使用,而且如果服务器的IP是动态由路由分配的或者同时存在多台服务器,如多一个备用服务器,那么在客户端有一套自动寻找服务器的功能是很有用的,要想实现这种自动寻找,最简单的就是udp广播。
    给你讲个我以前用的方案,是用在我的KTV系统里的:
    先从服务器开始,比如有两台服务器,哪个为主都可以,因为两个服务器的内容一样。所以,哪个先启动都一样,先启动的服务器先向自己的网段广播数据,告知客户端或其他服务器“我已启动”,这时,服务器就进入等待客户端或其他服务器的回应或请求状态。
    如果客户端先启动了并做出了回应,那么客户端应根据网络中是否有其他服务器回应给该服务器,告知服务器客户端认定的服务器IP是什么,如果是别的服务器,客户端将不必继续理会,如果客户端认为该服务器是他所知的第一个可用服务器,那么接下来客户端便可直接使用这台服务器继续工作。
    如果其他的服务器先启动了,如果那台服务器确定自己就是组服务器,并且没有客户端广播告知自己是服务器,那么自己就广播告知这台服务器,自己是主服务器,如果自己也不是主服务器,那就保持沉默。
    如果网络中没有任何主机启动(包括服务器或客户端),那么这台服务器就一直保持侦听状态,等待新的客户端寻找服务器请求或其他服务器的启动请求。
    当碰到新的客户端寻找服务器请求时,而自己又是该网段内唯一的服务器,那么服务器就广播自己的IP给新的客户端。
    当碰到其他的服务器发出请求时,该服务器同样广播IP给其他的服务器或客户端知道,自己已经是该网段中的服务器。这样一来,客户端可能能找到已启动并可用的服务器,即使有个两三台备用服务器,也不会造成冲突。当客户端与网段内的服务器通讯失败,客户端将再次尝试广播请求进行寻找服务器操作,然后客户端就一直等待服务器的回应。如果这时有一台备用服务器,那么备用服务器就会立即广播回应客户端,客户端将会立即转向所有的网络操作到该备用服务器,这时,备用服务器就变身成为了主服务器。如果没有备用服务器,管理员重启服务器并正常运行后,该服务器也会在启动时重新进入广播告知的步骤,这时客户端收到这个服务器的广播,就认定了这个服务器为主服务器,那么返回一条信息给服务器告知他就是主服务器,然后客户端就可以继续进行断网前的网络操作了。这种应用我以前在KTV系统里用过,因为以前的KTV里面经常有服务器挂掉的情况,很影响营业,所以就做了两台服务器,即使一台挂掉,还有另一台可以立即顶上,所以当时我就用了这种方案,结果确实起到了很大的用处,因为以前的KTV有大厅和包厢之分,服务器通常就是一台硬盘多点的PC,而且还放在大厅的吧台,低音炮、油烟什么的对机器影响很大,有时候内存松,CPU过热导致死机是常有的事,有个两台来顶,的确有好处。经常出问题的时候过去看,就是内存松之类的问题,重新插好再开机,那台服务器又可以做备用的了。客户端启动后向自己的网段广播请求,如果哪个服务器收到了
      

  2.   

    对于1: 你也查到了,用ping命令,然后对返回的信息 进行判断
    例如 "Ping 192.168.1.1 > E:\ip.txt",然后判断 ip.txt的内容  
    还有一个办法-如果可以的话,你可以在服务器上设一个共享的文件,作为判断,如果程序能访问到这个文件,那么 网络就是连通的
    对于2:我不知道肿么弄,也没查到什么靠谱的资料
    如果实在没有太好的办法,我觉得你可以用下面的思路去做做
    如果 1 中的IP、服务器名 都是正确的,然后你用你的程序直接去连接服务器,如果连不上 那么就有可能 是端口没打开
      

  3.   

    我觉得LZ想多了,正常情况下,客户端起动之后直接去连服务器就行了,连不上的报个错就好了,没必要检测来检测去的,服务器真要是被人改了IP,改了计算机名,你客户端又能拿他怎么样呢?初装的时候人工干预一下,把服务器的IP和端口填上去,以后起动就用上次的地址和端口连就行了,连不上,就报错,然后人工处理。端口有没有打开也只能连上去试才知道,数据库直接连上去就好了,连不上程序会报错,处理一下错误代码就完事了。