网络编程参数的传递

来源:百度知道 编辑:UC知道 时间:2024/06/07 13:38:08
.....头文件和IP,ICMP的结构体略了
// 定义ICMP回应答复
typedef struct _ECHOREPLY
{
IPHDR ipHdr;
ECHOREQUEST echoRequest;
char cFiller[256];
}ECHOREPLY, *PECHOREPLY;

// 计算校验和
u_short checksum(u_short *buffer, int len)//略了
int SendEchoRequest(SOCKET s,struct sockaddr_in *lpstToAddr) //略了
DWORD RecvEchoReply(SOCKET s, LPSOCKADDR_IN lpsaFrom, u_char *pTTL)
// 等待回应答复,使用select机制
int WaitForEchoReply(SOCKET s)
{
struct timeval timeout;
fd_set readfds;

readfds.fd_count = 1;
readfds.fd_array[0] = s;
timeout.tv_sec = 5;
timeout.tv_usec = 0;

return(select(1, &readfds, NULL, NULL, &timeout));
}

// Ping功能实现
void Ping(char *pstrHost)
{
SOCKET rawSocket;
LPHOSTENT lpHost;
struct sockaddr_in destIP;
struct sockaddr_in srcIP;
DWORD dwTimeSent;
DWORD dwElapsed;
u_char cTTL;
int nLoop;

void main(int argc, char **argv)
{
WSADATA wsd;
// 检测输入的参数
if (argc!= 2)
{
printf("\nUsage: ping hostname\n");
return;
}
// 初始化Winsock
if (WSAStartup(MAKEWORD(1,1), &wsd) != 0)
{
printf("加载Winsock失败!\n");
}

//开始Ping
Ping(argv[1]);

// 释放Winsock资源
WSACleanup();
}

其中的Ping(argv[1])其中的参数就是你要Ping的主机名。应该可以用IP的,你试试。

argv[1]是执行时输入的参数,不是自动得到的。
看Void mail()里面的参数就知道