如何Ping

出自VFP Wiki

(修訂版本間差異)
跳轉到: 導航, 搜尋
(revert)
 
(3個中途的修訂版本沒有顯示)

在2005年4月21日 (四) 10:49的最新修訂版本


出處:http://fox.hanyu.com.tw/View.aspx?fbId=1&Id=85

LPARAMETERS tcWhere, tnWhichPort
LOCAL lReturnValue
* by josh@jassing.com
* with LOTS of help from (actually; all the hard work by) Markus Voellmy
* wrapped up as a big function by Lou Harris
*
* ? pingstate( pingx( "www.jassing.com",80 ) )
* would check jassing.com to be sure it's running a web server
* NOTE: it does not do any dns lookups; so if you're checking for a mail server, you need
* to resolve the mx record yourself.
IF VARTYPE(tnWhichPort) # "N"
    tnWhichPort = 80
ENDIF
*? pingstate( pingx( "www.jassing.com",80 ) )
lReturnValue = pingstate( pingx( m.tcWhere, m.tnWhichPort ) )
RETURN m.lReturnValue

#DEFINE sckClosed 0
#DEFINE sckOpen 1
#DEFINE sckListening 2
#DEFINE sckConnectionPending 3
#DEFINE sckResolvingHost 4
#DEFINE sckHostResolved 5
#DEFINE sckConnecting 6
#DEFINE sckConnected 7
#DEFINE sckClosing 8
#DEFINE sckError 9
FUNC PingState
    LPARAM tnState
    LOCAL lcState
    DO CASE
    CASE tnState = sckClosed
        lcState = "Closed"
    CASE tnState = sckOpen
        lcState = "Open"
    CASE tnState = sckListening
        lcState = "Listening"
    CASE tnState = sckConnectionPending
        lcState = "Waiting"
    CASE tnState = sckResolvingHost
        lcState = "Resolving"
    CASE tnState = sckConnecting
        lcState = "Connecting"
    CASE tnState = sckConnected
        lcState = "Connected"
    CASE tnState = sckClosing
        lcState = "Closing"
    CASE tnState = sckError
        lcState = "Error"
    OTHERWISE
        lcState = "Unknown"
    ENDCASE
RETURN lcState

FUNC pingx
    LPARAM tcServer, tnPort
    LOCAL lnState, loPing, lnLast
    loPing=CREA("mswinsock.winsock")
    WITH loPing
        .remoteport=tnPort
        .remotehost = tcserver
        .CONNECT()
        lnLast = -1
        DO WHILE .state < sckConnected
            IF lnLast # .state
                lnLast = .state
            ENDIF
        ENDDO
        lnState = .state
        .CLOSE()
    ENDWITH
    RETURN lnState
ENDFUNC