⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_37227.htm

📁 vc
💻 HTM
字号:
<p>
序号:37227 发表者:Supin 发表日期:2003-04-23 09:37:42
<br>主题:怎么编程判断局域网中另一台机器已开机?(在线等待)
<br>内容:&nbsp;&nbsp; 怎么编程判断局域网中另一台机器已开机?<BR>即是相互连通的。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:bb 回复日期:2003-04-23 09:54:57
<br>内容:通过ping原理可以得到<BR><BR>MSDN第一张盘\Samples\VC98\sdk\netds\winsock\ping中有较完整的源程序
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Supin 回复日期:2003-04-23 10:03:16
<br>内容:bb大哥,ping是一种不错的选择,但感觉太麻烦了一点,有没有简单一点的Windows 网络API函数可以判断的?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:bb 回复日期:2003-04-23 10:10:52
<br>内容:/******************************************************************************\<BR>* ping.c - Simple ping utility using SOCK_RAW<BR>* <BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is a part of the Microsoft Source Code Samples.<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Copyright 1996-1997 Microsoft Corporation.<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; All rights reserved.<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This source code is only intended as a supplement to<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Microsoft Development Tools and/or WinHelp documentation.<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; See these sources for detailed information regarding the<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Microsoft samples programs.<BR>\******************************************************************************/<BR><BR>#pragma pack(4)<BR><BR>#define WIN32_LEAN_AND_MEAN<BR>#include &lt;winsock2.h&gt;<BR>#include &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR><BR>#define ICMP_ECHO 8<BR>#define ICMP_ECHOREPLY 0<BR><BR>#define ICMP_MIN 8 // minimum 8 byte icmp packet (just header)<BR><BR>/* The IP header */<BR>typedef struct iphdr {<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int h_len:4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// length of the header<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int version:4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Version of IP<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned char tos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Type of service<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short total_len;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// total length of the packet<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short ident;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// unique identifier<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short frag_and_flags; // flags<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned char&nbsp;&nbsp;ttl; <BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned char proto;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // protocol (TCP, UDP etc)<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short checksum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // IP checksum<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int sourceIP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int destIP;<BR><BR>}IpHeader;<BR><BR>//<BR>// ICMP header<BR>//<BR>typedef struct _ihdr {<BR>&nbsp;&nbsp;BYTE i_type;<BR>&nbsp;&nbsp;BYTE i_code; /* type sub code */<BR>&nbsp;&nbsp;USHORT i_cksum;<BR>&nbsp;&nbsp;USHORT i_id;<BR>&nbsp;&nbsp;USHORT i_seq;<BR>&nbsp;&nbsp;/* This is not the std header, but we reserve space for time */<BR>&nbsp;&nbsp;ULONG timestamp;<BR>}IcmpHeader;<BR><BR>#define STATUS_FAILED 0xFFFF<BR>#define DEF_PACKET_SIZE 32<BR>#define MAX_PACKET 1024<BR><BR>#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s))<BR>#define xfree(p)&nbsp;&nbsp; HeapFree (GetProcessHeap(),0,(p))<BR><BR>void fill_icmp_data(char *, int);<BR>USHORT checksum(USHORT *, int);<BR>void decode_resp(char *,int ,struct sockaddr_in *);<BR><BR>void Usage(char *progname){<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;fprintf(stderr,"Usage:\n");<BR>&nbsp;&nbsp;fprintf(stderr,"%s &lt;host&gt; [data_size]\n",progname);<BR>&nbsp;&nbsp;fprintf(stderr,"datasize can be up to 1Kb\n");<BR>&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR><BR>}<BR>int main(int argc, char **argv){<BR><BR>&nbsp;&nbsp;WSADATA wsaData;<BR>&nbsp;&nbsp;SOCKET sockRaw;<BR>&nbsp;&nbsp;struct sockaddr_in dest,from;<BR>&nbsp;&nbsp;struct hostent * hp;<BR>&nbsp;&nbsp;int bread,datasize;<BR>&nbsp;&nbsp;int fromlen = sizeof(from);<BR>&nbsp;&nbsp;int timeout = 1000;<BR>&nbsp;&nbsp;char *dest_ip;<BR>&nbsp;&nbsp;char *icmp_data;<BR>&nbsp;&nbsp;char *recvbuf;<BR>&nbsp;&nbsp;unsigned int addr=0;<BR>&nbsp;&nbsp;USHORT seq_no = 0;<BR><BR>&nbsp;&nbsp;if (WSAStartup(MAKEWORD(2,1),&amp;wsaData) != 0){<BR>&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"WSAStartup failed: %d\n",GetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;if (argc &lt;2 ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;Usage(argv[0]);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;sockRaw = WSASocket (AF_INET,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOCK_RAW,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPPROTO_ICMP,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, 0,0);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if (sockRaw == INVALID_SOCKET) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;bread = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&amp;timeout,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(timeout));<BR>&nbsp;&nbsp;if(bread == SOCKET_ERROR) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"failed to set recv timeout: %d\n",WSAGetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;timeout = 1000;<BR>&nbsp;&nbsp;bread = setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&amp;timeout,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(timeout));<BR>&nbsp;&nbsp;if(bread == SOCKET_ERROR) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"failed to set send timeout: %d\n",WSAGetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;memset(&amp;dest,0,sizeof(dest));<BR><BR>&nbsp;&nbsp;hp = gethostbyname(argv[1]);<BR><BR>&nbsp;&nbsp;if (!hp){<BR>&nbsp;&nbsp;&nbsp;&nbsp;addr = inet_addr(argv[1]);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if ((!hp)&nbsp;&nbsp;&amp;&amp; (addr == INADDR_NONE) ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"Unable to resolve %s\n",argv[1]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;if (hp != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&amp;(dest.sin_addr),hp-&gt;h_addr,hp-&gt;h_length);<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest.sin_addr.s_addr = addr;<BR><BR>&nbsp;&nbsp;if (hp)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest.sin_family = hp-&gt;h_addrtype;<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest.sin_family = AF_INET;<BR><BR>&nbsp;&nbsp;dest_ip = inet_ntoa(dest.sin_addr);<BR><BR>&nbsp;&nbsp;if (argc &gt;2) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;datasize = atoi(argv[2]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (datasize == 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datasize = DEF_PACKET_SIZE;<BR><BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datasize = DEF_PACKET_SIZE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;datasize += sizeof(IcmpHeader);&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;icmp_data = xmalloc(MAX_PACKET);<BR>&nbsp;&nbsp;recvbuf = xmalloc(MAX_PACKET);<BR><BR>&nbsp;&nbsp;if (!icmp_data) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"HeapAlloc failed %d\n",GetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;memset(icmp_data,0,MAX_PACKET);<BR>&nbsp;&nbsp;fill_icmp_data(icmp_data,datasize);<BR><BR>&nbsp;&nbsp;while(1) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;int bwrote;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;((IcmpHeader*)icmp_data)-&gt;i_cksum = 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;((IcmpHeader*)icmp_data)-&gt;timestamp = GetTickCount();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;((IcmpHeader*)icmp_data)-&gt;i_seq = seq_no++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;((IcmpHeader*)icmp_data)-&gt;i_cksum = checksum((USHORT*)icmp_data, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datasize);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&amp;dest,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(dest));<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (bwrote == SOCKET_ERROR){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (WSAGetLastError() == WSAETIMEDOUT) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("timed out\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"sendto failed: %d\n",WSAGetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (bwrote &lt; datasize ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stdout,"Wrote %d bytes\n",bwrote);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&amp;from,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;fromlen);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (bread == SOCKET_ERROR){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (WSAGetLastError() == WSAETIMEDOUT) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("timed out\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"recvfrom failed: %d\n",WSAGetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExitProcess(STATUS_FAILED);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;decode_resp(recvbuf,bread,&amp;from);<BR>&nbsp;&nbsp;&nbsp;&nbsp;Sleep(1000);<BR><BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return 0;<BR><BR>}<BR>/* <BR>&nbsp;&nbsp;&nbsp;&nbsp;The response is an IP packet. We must decode the IP header to locate <BR>&nbsp;&nbsp;&nbsp;&nbsp;the ICMP data <BR>*/<BR>void decode_resp(char *buf, int bytes,struct sockaddr_in *from) {<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;IpHeader *iphdr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IcmpHeader *icmphdr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short iphdrlen;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;iphdr = (IpHeader *)buf;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;iphdrlen = iphdr-&gt;h_len * 4 ; // number of 32-bit words *4 = bytes<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (bytes&nbsp;&nbsp;&lt; iphdrlen + ICMP_MIN) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Too few bytes from %s\n",inet_ntoa(from-&gt;sin_addr));<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;icmphdr = (IcmpHeader*)(buf + iphdrlen);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (icmphdr-&gt;i_type != ICMP_ECHOREPLY) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"non-echo type %d recvd\n",icmphdr-&gt;i_type);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (icmphdr-&gt;i_id != (USHORT)GetCurrentProcessId()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"someone else's packet!\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf("%d bytes from %s:",bytes, inet_ntoa(from-&gt;sin_addr));<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(" icmp_seq = %d. ",icmphdr-&gt;i_seq);<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(" time: %d ms ",GetTickCount()-icmphdr-&gt;timestamp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR><BR><BR>USHORT checksum(USHORT *buffer, int size) {<BR><BR>&nbsp;&nbsp;unsigned long cksum=0;<BR><BR>&nbsp;&nbsp;while(size &gt;1) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;cksum+=*buffer++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;size -=sizeof(USHORT);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(size ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;cksum += *(UCHAR*)buffer;<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;cksum = (cksum &gt;&gt; 16) + (cksum &amp; 0xffff);<BR>&nbsp;&nbsp;cksum += (cksum &gt;&gt;16);<BR>&nbsp;&nbsp;return (USHORT)(~cksum);<BR>}<BR>/* <BR>&nbsp;&nbsp;&nbsp;&nbsp;Helper function to fill in various stuff in our ICMP request.<BR>*/<BR>void fill_icmp_data(char * icmp_data, int datasize){<BR><BR>&nbsp;&nbsp;IcmpHeader *icmp_hdr;<BR>&nbsp;&nbsp;char *datapart;<BR><BR>&nbsp;&nbsp;icmp_hdr = (IcmpHeader*)icmp_data;<BR><BR>&nbsp;&nbsp;icmp_hdr-&gt;i_type = ICMP_ECHO;<BR>&nbsp;&nbsp;icmp_hdr-&gt;i_code = 0;<BR>&nbsp;&nbsp;icmp_hdr-&gt;i_id = (USHORT)GetCurrentProcessId();<BR>&nbsp;&nbsp;icmp_hdr-&gt;i_cksum = 0;<BR>&nbsp;&nbsp;icmp_hdr-&gt;i_seq = 0;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;datapart = icmp_data + sizeof(IcmpHeader);<BR>&nbsp;&nbsp;//<BR>&nbsp;&nbsp;// Place some junk in the buffer.<BR>&nbsp;&nbsp;//<BR>&nbsp;&nbsp;memset(datapart,'E', datasize - sizeof(IcmpHeader));<BR><BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:neilgan 回复日期:2003-04-23 10:53:25
<br>内容:Try connect to port 139 of the computer, which is its netbios port. If succeeded, it is power on.<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Supin 回复日期:2003-04-23 12:24:02
<br>内容:不好意思,只能给一个人分,下次再请大家光顾。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -