1. 程式人生 > >網路程式設計中通過hostname獲取ip的方法

網路程式設計中通過hostname獲取ip的方法

一般網路程式設計中,大部分公司客戶端請求服務端地址一般還是採用域名+訪問檔案的形式。

比如:www.hehe.com/request.do

但是有些公司某些因素,從測試到線上一直用的ip地址作為了請求地址。

http://212.112.xxx,xx:8080/request.do

使用域名和使用IP其實都是有各自的利弊。

因為我們都知道如果伺服器換地址了,那麼如果使用了ip作為address的話,本身在客戶端寫死了請求地址,就需要更新客戶端。

使用域名則不會有如上問題。

但是使用域名便利後帶來的是一個性能或者是時間上的犧牲。

其實說白了,域名就是起了一箇中間者的作用,我們發起一條請求時,域名還是被解析成了ip去請求。

因此可以看出中間多了一步域名解析過程。

於是我們可以考慮下,在程式碼裡動態的把請求地址域名換成ip地址。

簡單說,這樣既兼顧了兩者的優點。

以下是部分根據域名獲取ip地址程式碼

//根據域名獲取ip地址
-(NSString*)getIPWithHostName:(const NSString*)hostName
{
    const char *hostN= [hostName UTF8String];
    struct hostent* phot;
    
    @try {
        phot = gethostbyname(hostN);
        
    }
    @catch (NSException *exception) {
        return nil;
    }
    
    struct in_addr ip_addr;
    memcpy(&ip_addr, phot->h_addr_list[0], 4);
    char ip[20] = {0};
    inet_ntop(AF_INET, &ip_addr, ip, sizeof(ip));
    
    NSString* strIPAddress = [NSString stringWithUTF8String:ip];
    return strIPAddress;
}

記得新增兩個需要包含的標頭檔案

#include <netdb.h>
#include <sys/socket.h>

最後提一點是HostName格式不要帶http://.

我本來是帶這個完整路徑,發現獲取的和我們本身服務端的ip地址不一致。

去掉後就行了。

相關推薦

網路程式設計通過hostname獲取ip方法

一般網路程式設計中,大部分公司客戶端請求服務端地址一般還是採用域名+訪問檔案的形式。 比如:www.hehe.com/request.do 但是有些公司某些因素,從測試到線上一直用的ip地址作為了請求地址。 http://212.112.xxx,xx:8080/reques

Android網路程式設計的URLConnection的IP設定

虛擬機器測試:10.0.0.2 PC連線乙太網:通過cmd命令,進入命令視窗。輸入ipconfig檢視乙太網介面卡ipv4地址 Android測試機連入本機WiFi網路:如圖 如果Android上提示 java.net.SocketTimeoutEx

Android網路程式設計關於AsyncHttpClient獲取cookie的問題

之前的專案登入模組存在問題,登入狀態和使用者名稱直接存在了SharedPreferences裡,進入軟體時直接判斷使用者名稱是否為空,為空時才進入登入頁面,否則直接讀取SP中的相關資料,看了AsyncHttpClient的文件後,才發現可以允許讀取cookie。

Linux 網路程式設計通過IP或者主機名獲取資訊

struct hostent { char *h_name; /* 主機的正式名稱*/ char **h_aliases; /* 主機的別名列表*/ int h_addrtype; /* 主機的地址型

淺談 TCP/IP 網路程式設計 socket 的行為

來源:PromisE_謝  連結:www.cnblogs.com/promise6522/archive/2012/03/03/2377935.html 我認為,想要熟練掌握 Linux 下的 TCP/IP 網路程式設計,至少有三個層面的知識需要熟悉: TCP/IP

Python程式設計通過反射獲取包名下所有模組及模組所包含的方法

準備工作 環境: python 3.6 檔案結構 ├── clazz │ ├── __init__.py │ ├── a.py │ └── b.py └── main.py a.py 的程

網路程式設計如何設定伺服器監聽IP

       在使用socket編寫伺服器程式時,設定伺服器繫結的sockaddr_in結構往往會困擾很多同學,sockaddr_in結構中sin_famliy和sin_port(注意要使用htons轉換為網路序)就不說了,相信大家已知道。sin_addr是要設定的監聽地址

C++ 通過GetAdaptersInfo獲取網絡卡配置和Ip地址資訊

#include <WinSock2.h> #include <Iphlpapi.h> #include <iostream> using namespace std; #pragma comment(lib,"Iphlpapi.lib") //需要新增Iphlpapi

淺談TCP/IP網路程式設計socket的行為

socket錯誤碼: EINTR: 4 阻塞的操作被取消阻塞的呼叫打斷。如設定了傳送接收超時,就會遇到這種錯誤。 只能針對阻塞模式的socket。讀,寫阻塞的socket時,-1返回,錯誤號為INTR。另外,如果出現EINTR即errno為4,錯誤描述Interrupted system call,操作

SQL Server2008通過SQL獲取表結構

nds 數據 join xtend isn val data 運行 order SQL Server2008中通過SQL獲取表結構 新增數據用戶,角色為public。映射到待獲取表結構的數據庫上,授與用戶在該數據庫上的身份為db_owner 運行例如以下SQL語

00113_通過反射獲取成員方法並使用

tor 執行指定 eth 演示 反射 println span 通過 font 1、在反射機制中,把類中的成員方法使用類Method表示; 2、通過Class類中提供的方法獲取成員方法:   (1)返回獲取一個方法 public Method getMethod(Stri

InputStream通過mark和reset方法重復利用緩存

輸出 string sys 都是 實現 源碼 常用 ges 不支持 通過緩存InputStream可重復利用一個InputStream,但是要緩存一整個InputStream內存壓力可能是比較大的。如果第一次讀取InputStream是用來判斷文件流類型,文件編碼等

Angular通過$location獲取地址欄的參數詳解

localhost function arch app 附加 進行 utf 對象 scope Angular中通過$location獲取url中的參數   最近,項目開發正在進行時,心有點燥,許多東西沒來得及去研究,今天正想問題呢,同事問到如何獲取url中的參數,我一時半會

java網路程式設計常用的類

java網路程式設計中常用的類 1、InetAddress 用於封裝計算機的IP地址和DNS(Domain Name System域名系統)(沒有埠資訊) InetAddress沒有構造器,要得到物件只能通過靜態方法實現 /** * 使用getLocalHost的方法建立InetA

關於網路程式設計Socket的初步總結

1,要實現通訊必須先建立套接字 2,上一步驟中建立的套接字只用於listen()和accept(),不用於收發資料【以tcp為例來說】 [https://blog.csdn.net/David_xtd/article/details/7087843?utm_source=blogxg

網路程式設計time_wait的作用和套接字選項SO_REUSEADDR

這兩天看APUE為一個簡單的問題特別惱火,該問題起源於兩個套接字選項就是SO_REUSEADDR和SO_REUSEPORT其實在看的過程中問學長了,學長解釋的也比較清楚,就是自己悟性不好,一時半會沒理解。自己在網上找了幾篇優秀的部落格看了,受益頗多! 先從套接字選項SO_REUSEADD

Windows網路程式設計(六):IP Helper

IP Helper是Windows系統與IP配置和管理的重要介面,通過IP Helper 可以獲得很多跟網路配置相關的資訊。比如說本機IP、閘道器設定、網絡卡數量和連線資訊。 #include <windows.h> #include "iphlpapi.h" /* 全域

網路程式設計】TCP網路程式設計connect()、listen()和accept()三者之間的關係

舉個簡單的例子(以下程式碼只是示範性的,用於說明不同套接字的作用,實際的函式會需要更多的引數): /* 建立用於監聽和接受客戶端連線請求的套接字 */ server_sock = socket(); /* 繫結監聽的IP地址和埠 */ bind(server_sock); /* 開始監聽 */ li

c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <process.h> #include <winsock2.h> #include <win

c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端

原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/9661012.html  先講Linux下(windows下在後面可以直接跳到後面看): 一.執行緒基本概念 前面我們講過多程序伺服器,但我們知道它開銷很大