linux下判斷網路是否連線

2021-09-08 01:16:47 字數 1569 閱讀 9039

本文改寫自網上的乙個程式,原始程式中為阻塞式呼叫,而且有現成建立的過程,非常不利於整合到自己程式中,因此對原始程式進行改造,使其可以完成傳送乙個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即表示網路狀態良好,否則表示網路狀態不連同,本程式...