本文改寫自網上的乙個程式,原始程式中為阻塞式呼叫,而且有現成建立的過程,非常不利於整合到自己程式中,因此對原始程式進行改造,使其可以完成傳送乙個imcp包的方式來判斷網路連通,只需要呼叫改進後的
bool netisok()
函式即可,該函式返回true即表示網路狀態良好,否則表示網路狀態不連同,本程式中只傳送了乙個icmp包,在實際應用中可以根據需要改進為傳送多個imcp包。修改之後的程式為:只需要呼叫函式netisok()即可。原始碼如下所示:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#definemax_wait_time 1
#definemax_no_packets 1
#defineicmp_headsize 8
#definepacket_size 4096
structtimeval tvsend,tvrecv;
structsockaddr_in dest_addr,recv_addr;
intsockfd;
pid_tpid;
charsendpacket[packet_size];
charrecvpacket[packet_size];
//函式定義
voidtimeout(intsigno);
unsignedshortcal_chksum(unsignedshort*addr,intlen);
intpack(intpkt_no,char*sendpacket);
intsend_packet(intpkt_no,char*sendpacket);
intrecv_packet(intpkt_no,char*recvpacket);
intunpack(intcur_seq,char*buf,intlen);
voidtv_sub(structtimeval *out,structtimeval *in);
void_closesocket();
boolnetisok()
{doublertt;
structhostent *host;
structprotoent *protocol;
inti,recv_status;
#ifdef_use_dns //如果定義該巨集,則可以使用網域名稱進行判斷網路連線,例如www.baidu.com
/* 設定目的位址資訊 */
linux下判斷網路是否連線
本文改寫自網上的乙個程式,原始程式中為阻塞式呼叫,而且有現成建立的過程,非常不利於整合到自己程式中,因此對原始程式進行改造,使其可以完成傳送乙個imcp包的方式來判斷網路連通,只需要呼叫改進後的 bool netisok 函式即可,該函式返回true即表示網路狀態良好,否則表示網路狀態不連同,本程式...
linux下判斷網路是否連線
本文改寫自網上的乙個程式,原始程式中為阻塞式呼叫,而且有程序建立的過程,非常不利於整合到自己程式中,因此對原始程式進行改造,使其可以完成傳送乙個imcp包的方式來判斷網路連通,只需要呼叫改進後的 bool netisok 函式即可,該函式返回true即表示網路狀態良好,否則表示網路狀態不連同,本程式...
linux下C語言判斷網路是否連線
本文改寫自網上的乙個程式,原始程式中為阻塞式呼叫,而且有程序建立的過程,非常不利於整合到自己程式中,因此對原始程式進行改造,使其可以完成傳送乙個imcp包的方式來判斷網路連通,只需要呼叫改進後的 bool netisok 函式即可,該函式返回true即表示網路狀態良好,否則表示網路狀態不連同,本程式...