欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux c 獲取本機(jī)公網(wǎng)IP的實(shí)現(xiàn)方法

 更新時(shí)間:2013年05月27日 15:06:22   作者:  
本篇文章是對(duì)在linux中使用c語言獲取本機(jī)公網(wǎng)IP的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
1、linux c代碼實(shí)現(xiàn)
復(fù)制代碼 代碼如下:

#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
typedef enum {false,true}bool;
int main()
{
    bool flag;
    int    sock;
    char **pptr = NULL;
    struct sockaddr_in    destAddr;
    struct hostent    *ptr = NULL;
    char destIP[128];
    char szBuffer[] = {"GET /ip2city.asp HTTP/1.1\r\nHost:www.ip138.com\r\nConnection:Close\r\n\r\n"};
    char res[1024];

  //初始化socket
    sock = socket(AF_INET,SOCK_STREAM,0);
    if( -1 == sock ){
        perror("creat socket failed");
        exit(0);
    }

    bzero((void *)&destAddr,sizeof(destAddr));
    destAddr.sin_family = AF_INET;       
    destAddr.sin_port = htons(80);
   //首先是獲取www.ip138.com的IP地址
    ptr = gethostbyname("www.ip138.com");
    if(NULL == ptr){
        perror("gethostbyname error");
        exit(0);
    }  
  //對(duì)于www.ip138.com的每個(gè)IP進(jìn)行嘗試連接,直到有一個(gè)連接成功為止,或者無法連接,則退出程序
    for(flag=false,pptr=ptr->h_addr_list ; NULL != *pptr ; ++pptr){
        inet_ntop(ptr->h_addrtype,*pptr,destIP,sizeof(destIP));
        printf("addr:%s\n",destIP);
        destAddr.sin_addr.s_addr = inet_addr(destIP);
        if(-1!=connect(sock,(struct sockaddr *)&destAddr,sizeof(struct sockaddr))){
            flag = true;
            break;
        }
    }

    if(false == flag){
        perror("connect failed");
    }

  //發(fā)送獲取IP的數(shù)據(jù)包給www.ip138.com
    if(strlen(szBuffer) != send(sock,szBuffer,strlen(szBuffer),0)){
        perror("send error");
        exit(0);
    }

  //接收數(shù)據(jù)包
    if(-1 == recv(sock,res,1024,0)){
        perror("recv error");
        exit(0);
    }

    printf("res:\n%s\n",res);   
    return 0;
}

2、將上述代碼保存getip.c,并使用如下命令編譯
復(fù)制代碼 代碼如下:

gcc -o getip getip.c

3、運(yùn)行程序
復(fù)制代碼 代碼如下:

./getip

相關(guān)文章

  • C語言帶你學(xué)會(huì)位段相關(guān)知識(shí)

    C語言帶你學(xué)會(huì)位段相關(guān)知識(shí)

    這篇文章主要介紹了什么是位段,位段的聲明和結(jié)構(gòu)是類似的,位段的成員必須是 int、unsigned int 或signed int;位段的成員名后邊有一個(gè)冒號(hào)和一個(gè)數(shù)字,本文有詳細(xì)的代碼案例,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • C++遞歸與分治算法原理示例詳解

    C++遞歸與分治算法原理示例詳解

    這篇文章主要為大家介紹了C++遞歸與分治算法的策略原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • c++項(xiàng)目構(gòu)成從cmake使用基礎(chǔ)詳解

    c++項(xiàng)目構(gòu)成從cmake使用基礎(chǔ)詳解

    這篇文章主要為大家介紹了c++項(xiàng)目構(gòu)成,從cmake使用基礎(chǔ)開始為大家講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Qt學(xué)習(xí)教程之對(duì)話框消失動(dòng)畫效果

    Qt學(xué)習(xí)教程之對(duì)話框消失動(dòng)畫效果

    這篇文章主要給大家介紹了關(guān)于Qt學(xué)習(xí)教程之對(duì)話框消失動(dòng)畫效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 基于一致性hash算法 C++語言的實(shí)現(xiàn)詳解

    基于一致性hash算法 C++語言的實(shí)現(xiàn)詳解

    在《基于一致性hash算法(consistent hashing)的使用詳解》一文中已經(jīng)介紹了一致性hash的基本原理,本文將會(huì)對(duì)其具體實(shí)現(xiàn)細(xì)節(jié)進(jìn)行描述,并用c++語言對(duì)一致性hash進(jìn)行了簡單的實(shí)現(xiàn)
    2013-05-05
  • 談?wù)剉ector的特殊性之為什么它不是STL容器

    談?wù)剉ector的特殊性之為什么它不是STL容器

    這篇文章主要給大家介紹了關(guān)于vector的特殊性之為什么它不是STL容器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • C++實(shí)現(xiàn)LeetCode(21.混合插入有序鏈表)

    C++實(shí)現(xiàn)LeetCode(21.混合插入有序鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(21.混合插入有序鏈表),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++面試八股文之什么是構(gòu)造函數(shù)

    C++面試八股文之什么是構(gòu)造函數(shù)

    構(gòu)造函數(shù)是一種特殊的成員函數(shù),用于創(chuàng)建和初始化類的對(duì)象,這篇文章主要為大家詳細(xì)介紹了C++中構(gòu)造函數(shù)的相關(guān)知識(shí)點(diǎn),需要的可以參考一下
    2023-06-06
  • 詳解C語言中index()函數(shù)和rindex()函數(shù)的用法

    詳解C語言中index()函數(shù)和rindex()函數(shù)的用法

    這篇文章主要介紹了C語言中index()函數(shù)和rndex()函數(shù)的用法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),要的朋友可以參考下
    2015-08-08
  • C++11獲取線程返回值的實(shí)現(xiàn)代碼

    C++11獲取線程返回值的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++11獲取線程返回值的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2019-04-04

最新評(píng)論