Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्राम: राउंड ट्रिप टाइम (RTT) की गणना

राउंड ट्रिप टाइम (RTT) क्या है?

RTT एक सिग्नल भेजने और उसकी पावती प्राप्त करने के बीच का कुल समय है। इसमें प्रसारण समय, प्रसंस्करण समय और कतार विलंब शामिल हैं।

RTT को प्रभावित करने वाले कारक

  • संचारण माध्यम (फाइबर, कॉपर, वायरलेस)
  • नेटवर्क में नोड्स/हॉप्स की संख्या
  • नेटवर्क ट्रैफिक/भीड़
  • भौतिक दूरी
  • सर्वर प्रतिक्रिया समय

नोट: शुद्ध C में RTT

मूल C में HTTP अनुरोध करने के लिए मानक पुस्तकालय समर्थन नहीं है। मूल कोड पायथन में था (requests पुस्तकालय का उपयोग करके)। यहां C समकक्ष है जो सिस्टम कॉल का उपयोग करता है:

पिंग का उपयोग करके C प्रोग्राम (लिनक्स/यूनिक्स)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

double measure_rtt_ping(const char *host) {
    char command[256];
    snprintf(command, sizeof(command), "ping -c 1 %s", host);
    
    FILE *fp = popen(command, "r");
    if (!fp) return -1;
    
    char line[256];
    double rtt = -1;
    while (fgets(line, sizeof(line), fp)) {
        // "time=12.3 ms" पैटर्न खोजें
        char *time_ptr = strstr(line, "time=");
        if (time_ptr) {
            sscanf(time_ptr, "time=%lf", &rtt);
            break;
        }
    }
    pclose(fp);
    return rtt;  // मिलीसेकंड में
}

int main() {
    char host[256];
    printf("होस्टनाम/IP दर्ज करें: ");
    scanf("%255s", host);
    
    double rtt = measure_rtt_ping(host);
    if (rtt >= 0)
        printf("RTT to %s: %.2f ms\n", host, rtt);
    else
        printf("RTT मापने में विफल\n");
    
    return 0;
}

सॉकेट का उपयोग करके C प्रोग्राम (TCP SYN)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/time.h>
#include <unistd.h>

double measure_rtt_tcp(const char *hostname, int port) {
    struct hostent *he = gethostbyname(hostname);
    if (!he) return -1;
    
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0) return -1;
    
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    memcpy(&addr.sin_addr, he->h_addr, he->h_length);
    
    // नॉन-ब्लॉकिंग कनेक्ट के लिए टाइमआउट सेट करें
    struct timeval tv = {5, 0};  // 5 सेकंड टाइमआउट
    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
    setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
    
    struct timeval start, end;
    gettimeofday(&start, NULL);
    
    int result = connect(sock, (struct sockaddr*)&addr, sizeof(addr));
    
    gettimeofday(&end, NULL);
    close(sock);
    
    if (result < 0) return -1;
    
    double rtt_ms = (end.tv_sec - start.tv_sec) * 1000.0 + 
                    (end.tv_usec - start.tv_usec) / 1000.0;
    return rtt_ms;
}

int main() {
    double rtt = measure_rtt_tcp("www.google.com", 80);
    if (rtt >= 0)
        printf("TCP RTT: %.2f ms\n", rtt);
    else
        printf("कनेक्शन विफल\n");
    return 0;
}

ICMP पिंग (रॉ सॉकेट - रूट आवश्यक)

सटीक ICMP पिंग के लिए रॉ सॉकेट और रूट विशेषाधिकारों की आवश्यकता होती है। उत्पादन कोड के लिए, liboping या सिस्टम ping कमांड का उपयोग करें।

आउटपुट उदाहरण

होस्टनाम/IP दर्ज करें: www.google.com
RTT to www.google.com: 23.45 ms
  1. वर्ग में अंतःवृत्त का क्षेत्रफल ज्ञात करने का प्रोग्राम वर्ग में अंतःवृत्त का क्षेत्रफल ज्ञात करने का प्रोग्राम

    एक वर्ग में अंतःवृत्त वह वृत्त है जो वर्ग की भुजाओं को उनके सिरों पर छूता है। यानी अंतःवृत्त का व्यास वर्ग की भुजा के बराबर होता है। क्षेत्रफल की गणना सूत्र ((π/4)×a×a) का उपयोग करके की जा सकती है जहां a वर्ग की भुजा की लंबाई है। कोड का तर्क - वर्ग के अंदर अंतःवृत्त का क्षेत्रफल सूत्र ((π/4)×a×a) क

  1. C++ में ग्राफ के एज कवर की गणना करें C++ में ग्राफ के एज कवर की गणना करें

    एक ग्राफ के n वर्टेक्स की संख्या दी गई है, कार्य ग्राफ के एज कवर की गणना करना है। एज कवर ग्राफ के हर वर्टेक्स को कवर करने के लिए आवश्यक न्यूनतम एज की संख्या खोजना है। जैसे हमारे पास n = 5 है तो इसका ग्राफ ऐसा होगा: इसका एज कवर 3 है आइए एक और उदाहरण लेते हैं जहां n = 8 है और इसका एज कवर होगा: 4 उ

  1. पायथन प्रोग्राम: चतुष्फलक (Tetrahedron) का क्षेत्रफल ज्ञात करें पायथन प्रोग्राम: चतुष्फलक (Tetrahedron) का क्षेत्रफल ज्ञात करें

    इस लेख में, हम दी गई समस्या के समाधान और दृष्टिकोण के बारे में जानेंगे।समस्या कथन - एक चतुष्फलक की भुजा दी गई है, हमें चतुष्फलक का क्षेत्रफल ज्ञात करना होगा।एक चतुष्फलक एक ज्यामितीय आकृति है जो त्रिकोणीय आधार वाले पिरामिड जैसा दिखता है। यह चार त्रिकोणीय फलकों वाला एक ठोस वस्तु है, तीन किनारों पर, एक