當目前為止,客戶和伺服器程式一直是吧位址和埠號編譯到它們自己的內部。對於乙個更通用的伺服器和客戶程式來說,可以通過網路資訊函式來決定應該使用的位址和埠。
如果有足夠的許可權,可以將自己的服務新增到/etc/services檔案中的已知服務列表中,並在這個檔案中為埠號分配乙個名字,使使用者可以使用符號化的服務名而不是埠號的數字。
類似地,如果給定乙個計算機的名字,可以通過呼叫解析位址的主機資料庫函式來確定它的ip位址。這些函式通過查詢網路配置檔案來完成這一工作,如/etc/hosts檔案或網路資訊服務。
常用的網路資訊服務有nis(network information service,網路資訊服務)和dns(domain name service,網域名稱服務)。
主機資料庫函式在介面標頭檔案netdb.h中宣告,如下所示:
#include struct hostent *gethostbyaddr(const void *addr, size_t len, int type);
struct hostent *gethostbyname(const char *name);
這些函式返回的結構中至少會包含以下幾個成員:
struct hostent ;
如果沒有與查詢的主機或位址相關的資料項,這些資訊函式將返回乙個空指標。
類似地,與服務及其關聯埠號有關的資訊也可以通過一些服務資訊函式來獲取。如下所示:
#include struct servent *getservbyname(const char *name, const char *proto);
struct servent *getservbyport(int port, const char *proto);
proto引數指定用於連線服務的協議,它的兩個取值是tcp和udp,前者用於sock_stream型別的tcp連線,後者用於sock_dgram型別的udp資料報。
結構servent至少包含以下幾個成員:
struct servent ;
如果想要獲得某台計算機的主機資料庫資訊,可以呼叫gethostbyname函式並且將結果列印出來。注意,要把返回的位址列表轉換為正確的位址型別,並用函式inet_ntoa將它們從網路位元組序轉換為列印的字串。函式inet_ntoa的定義如下所示:
這個函式的作用是,將當前主機的名字寫入name指向的字串中。主機名將以null結尾。引數namelength指定了字串的長度,如果返回的主機名太長,它就會被截斷。gethostname在成功時返回0,失敗時返回-1.#include char *inet_nto(struct in_addr in);
#include int gethostname(char *name, int namelength);
下面這個程式getname.c用來獲取一台主機的有關資訊。
#include #include #include #include #include #include int main(int agrc, char *argv)
else
host = argv[1];
hostinfo = gethostbyname(host);
if (hostinfo)
printf("results for host %s:\n", host);
printf("name: %s\n", hostinfo->h_name);
printf("aliases:");
name = hostinfo->h_aliases;
while (*names)
printf("\n");
if (hostinfo->h_addrtype != af_inet)
addrs = hostinfo->h_addr_list;
while (*addrs)
printf("\n");
exit(0);
}程式解析
getname程式通過呼叫gethostbyname從主機資料庫中提取出主機的資訊。它列印出主機名、它的別名和該主機在它的網路介面上使用的ip位址。執行這個程式並指定主機名google時,程式給出了乙太網和解調器兩個網路介面的資訊,當使用主機名localhost時,程式只給出了迴路網路的資訊,如下所示:
第十五章預習
public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...
第十五章 物件導向程式設計 一
1 例子 2 派生類對基類的protected成員一樣沒有訪問許可權 3 引用和指標的靜態型別和動態型別可以不同,這是c 多型的基石 4 有的時候想不用多型的機制,可以使用如下方法 item base basep derived double d basep item base netprice 4...
第十五章 物件導向的程式設計
虛函式抽象基類 訪問控制和繼承 類作用域 建構函式與拷貝控制 容器與繼承 物件導向程式設計的核心思想是資料抽象 繼承 和動態繫結。型別轉換與繼承 可以使用using宣告改變成員的可訪問性。派生類可訪問的名字才可以使用using class預設私有繼承,struct預設公有繼承 名字查詢先於型別檢查,...