如果我知道 SOCKET 
(SOCKET 仅仅是一个handle, 就象我们定义时: SOCKET s_svr;)
我怎样通过它来得到相应的地址和端口号?

解决方案 »

  1.   

    给你一段代码,sockaddr_in name = {0};
    name.sin_family = AF_INET;
    int namelen = sizeof(sockaddr_in);
    SOCKET s = (SOCKET)hMyHandle;
    char szSockType[6][6] = { "NUL", "TCP", "UDP", "RAW", "RDM", "SEQ" };
    iRet = getsockname( s, (sockaddr*)&name, &namelen );
    if ( iRet != SOCKET_ERROR )
    {
      int sockType = 0;
      int optlen = 4;
      iRet = getsockopt(  s, SOL_SOCKET, SO_TYPE, (char*)&sockType, &optlen );
      printf("PID=%4d PORT=%5d %s\n", pHandleInfo->dwPid,
          ntohs( name.sin_port ), szSockType[sockType] );
    }
      

  2.   

    每次只是由端口和地址得到socket,没想到你想出了这样的问题,真是会想,佩服!
      

  3.   

    getsockname( s, (sockaddr*)&name, &namelen );
    确实很好用,谢谢
      

  4.   

    看了  Bird1945(老唬是女人!)  兄的代码收获不小
      

  5.   

    感谢 Bird1945(老唬是女人!) 
     另:
    getsockname 取本地地址和端口
    getpeername 取远程地址和端口