如下代码就可以实现ping.请尝试?int CPing::TakePing(CString strHostName,int iCount,CString *pstrList,int &iStrcout)
{
  CThreadInfo* pThreadInfo=NULL ;//= (CThreadInfo*)pParam;
     iStrcout=-1;
  SOCKET   rawSocket;
  struct    sockaddr_in saDest;
  struct    sockaddr_in saSrc;
  LPHOSTENT lpHost;
  CString str;
  int nRet;
  DWORD   dwTimeSent,dwElapsed;
  u_char    cTTL;
long m_laddr;
   
   rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
while (TRUE)
{
   str.Format("读取计算机:%s地址",strHostName);
iStrcout++;
pstrList [iStrcout]=str;
  m_laddr = inet_addr(strHostName);
if (m_laddr == INADDR_NONE)
{
lpHost = gethostbyname(strHostName);
  if (lpHost == NULL)
  {
  str.Format("计算机名字无效: %s", strHostName);
iStrcout++;
         pstrList [iStrcout]=str;
  return -1;
}
  saDest.sin_addr.s_addr = *((u_long FAR *) (lpHost->h_addr));
}
else
{
saDest.sin_addr.s_addr =m_laddr;
}
  saDest.sin_family = AF_INET;
  saDest.sin_port = 0;
  str.Format("Pinging %s [%s] with %d bytes of data:",
  strHostName,
  inet_ntoa(saDest.sin_addr),
  REQ_DATASIZE);
 
for (int nLoop = 0; nLoop < iCount; nLoop++)//ping 的次数
  {
     SendEchoRequest(rawSocket, &saDest);
  nRet = WaitForEchoReply(rawSocket);
  if (!nRet)
  {
  str.Format("超时");
return -1;
}
  else
  {
  // Receive reply
  dwTimeSent = RecvEchoReply(rawSocket, &saSrc, &cTTL);
// Calculate elapsed time
  dwElapsed = GetTickCount() - dwTimeSent;
  str.Format("Reply[%d] from: %s: bytes=%d time=%ldms TTL=%d", 
  nLoop+1,
  inet_ntoa(saSrc.sin_addr), 
  REQ_DATASIZE,
  dwElapsed,
  cTTL);
             iStrcout++;
     pstrList [iStrcout]=str;
  }
  }   
  break;
}
nRet = closesocket(rawSocket);
  return 1;
}