如下代码就可以实现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;
}
{
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;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货