例如,怎么样判断本机的7001端口是否已经被占用?
顺便问一下,如果一个socket在7001端口listen,那么其他的程序还能使用7001端口吗?
急用,请大家帮帮我,谢谢~

解决方案 »

  1.   

    /*
    #define MIB_TCP_STATE_IDLE              0
    #define MIB_TCP_STATE_CLOSED            1
    #define MIB_TCP_STATE_LISTEN            2
    #define MIB_TCP_STATE_SYN_SENT          3
    #define MIB_TCP_STATE_SYN_RCVD          4
    #define MIB_TCP_STATE_ESTAB             5
    #define MIB_TCP_STATE_FIN_WAIT1         6
    #define MIB_TCP_STATE_FIN_WAIT2         7
    #define MIB_TCP_STATE_CLOSE_WAIT        8
    #define MIB_TCP_STATE_CLOSING           9
    #define MIB_TCP_STATE_LAST_ACK         10
    #define MIB_TCP_STATE_TIME_WAIT        11
    #define MIB_TCP_STATE_DELETE_TCB       12
    */
    STDMETHODIMP CCNetwork::GetPortState(ULONG nPort, ULONG *nStateID)
    {

    MIB_TCPTABLE TcpTable[100];

    DWORD nSize = sizeof(TcpTable);
    if(NO_ERROR == GetTcpTable(&TcpTable[0],&nSize,TRUE))
    {
    DWORD nCount = TcpTable[0].dwNumEntries; if (nCount > 0)
    {
    for(int i=0;i<nCount;i++)
    {
    MIB_TCPROW TcpRow = TcpTable[0].table[i]; DWORD temp1 = TcpRow.dwLocalPort;
    int temp2 = temp1 / 256 + (temp1 % 256) * 256; if(temp2 == nPort)
    {
    *nStateID = TcpRow.dwState;
    return S_OK;
    }
    }
    }
    return S_FALSE;
    } return S_FALSE;
    }