日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux网络编程基础(二)

發布時間:2025/4/16 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux网络编程基础(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://blogold.chinaunix.net/u/4502/showart.php?id=13488

服務套和客戶機的信息函數

1、字節轉換函數

???? 在網絡上面有著許多類型的機器,這些機器在表示數據的字節順序是不同的, 比如i386芯片是低字節在內存地址的低端,高字節在高端,而alpha芯片卻相反. 為了統一起來,在Linux下面,有專門的字節轉換函數.

??? unsigned long int htonl(unsigned long int hostlong)?
??? unsigned short int htons(unisgned short int hostshort)?
??? unsigned long int ntohl(unsigned long int netlong)?
????unsigned short int ntohs(unsigned short int netshort)?

??? 在這四個轉換函數中,h 代表host, n 代表 network.s 代表short l 代表long 第一個函數的意義是將本機器上的long數據轉化為網絡上的long. 其他幾個函數的意義也差不多.

2、IP和域名的轉換?
??? 在網絡上標志一臺機器可以用IP或者是用域名.那么我們怎么去進行轉換呢??

??? struct hostent *gethostbyname(const char *hostname)?
??? struct hostent *gethostbyaddr(const char *addr,int len,int type)?
??? 在中有struct hostent的定義?
??? struct hostent{?
??????? char *h_name; /* 主機的正式名稱 */?
??????? char *h_aliases; /* 主機的別名 */?
??????? int h_addrtype; /* 主機的地址類型 AF_INET*/?
??????? int h_length; /* 主機的地址長度 對于IP4 是4字節32位*/?
??????? char **h_addr_list; /* 主機的IP地址列表 */?
??? }?
??? #define h_addr h_addr_list[0] /* 主機的第一個IP地址*/?

??? gethostbyname可以將機器名(如 linux.yessun.com)轉換為一個結構指針.在這個結構里面儲存了域名的信息?
??? gethostbyaddr可以將一個32位的IP地址(C0A80001)轉換為結構指針.?

??? 這兩個函數失敗時返回NULL 且設置h_errno錯誤變量,調用h_strerror()可以得到詳細的出錯信息

3、字符串的IP和32位的IP轉換.?
??? 在網絡上面我們用的IP都是數字加點(192.168.0.1)構成的, 而在struct in_addr結構中用的是32位的IP, 我們上面那個32位IP(C0A80001)是的192.168.0.1 為了轉換我們可以使用下面兩個函數?

??? int inet_aton(const char *cp,struct in_addr *inp)?
??? char *inet_ntoa(struct in_addr in)?

??? 函數里面 a 代表 ascii n 代表network.第一個函數表示將a.b.c.d的IP轉換為32位的IP,存儲在 inp指針里面.第二個是將32位IP轉換為a.b.c.d的格式.

4、服務信息函數?
??? 在網絡程序里面我們有時候需要知道端口.IP和服務信息.這個時候我們可以使用以下幾個函數?

??? int getsockname(int sockfd,struct sockaddr *localaddr,int *addrlen)?
??? int getpeername(int sockfd,struct sockaddr *peeraddr, int *addrlen)?
??? struct servent *getservbyname(const char *servname,const char *protoname)?
??? struct servent *getservbyport(int port,const char *protoname)?
??? struct servent?{?
??????? char *s_name; /* 正式服務名 */?
??????? char **s_aliases; /* 別名列表 */?
??????? int s_port; /* 端口號 */?
??????? char *s_proto; /* 使用的協議 */?
??? }?

???? 一般我們很少用這幾個函數.對應客戶端,當我們要得到連接的端口號時在connect調用成功后使用可得到 系統分配的端口號.對于服務端,我們用INADDR_ANY填充后,為了得到連接的IP我們可以在accept調用成功后 使用而得到IP地址.?

??? 在網絡上有許多的默認端口和服務,比如端口21對ftp80對應WWW.為了得到指定的端口號的服務 我們可以調用第四個函數,相反為了得到端口號可以調用第三個函數.

5、示例程序

/******* ..... (hostname_ip.c) ************/
#include "stdio.h"
#include "stdlib.h"
#include "errno.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "unistd.h"
#include "netinet/in.h"
#include "netdb.h"

int main(int argc ,char **argv)
{
??????? struct sockaddr_in addr;
??????? struct hostent *host;
??????? char **alias;

??????? if(argc<2) {
??????????????? fprintf(stderr,"Usage:%s hostname|ip.. a",argv[0]);
??????????????? exit(1);
??????? }

??????? argv++;
??????? for(;*argv!=NULL;argv++) {
??????????????? /* .......IP*/
??????????????? if(inet_aton(*argv,&addr.sin_addr)!=0) {
??????????????????????? host=gethostbyaddr((char *)&addr.sin_addr,4,AF_INET);
??????????????????????? printf("Address information of Ip %s ",*argv);
??????????????? }
??????????????? else {
??????????????????????? /* ..,.....?*/
??????????????????????? host=gethostbyname(*argv);
??????????????????????? printf("Address information of host %s ",*argv);
??????????????? }
??????????????? if(host==NULL) {
??????????????????????? /* ... ,.....*/
??????????????????????? fprintf(stderr,"No address information of %s ",*argv);
??????????????????????? continue;
??????????????? }
??????????????? printf("Official host name %s ",host->h_name);
??????????????? printf("Name aliases:");
??????????????? for(alias=host->h_aliases;*alias!=NULL;alias++)
??????????????????????? printf("%s ,",*alias);
??????????????? printf(" Ip address:");
??????????????? for(alias=host->h_addr_list;*alias!=NULL;alias++)
??????????????????????? printf("%s ,",inet_ntoa(*(struct in_addr *)(*alias)));
??????? }
}

總結

以上是生活随笔為你收集整理的Linux网络编程基础(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩va亚洲va欧美va久久 | 精品久久久久一区二区 | 国产二区精品视频 | 亚洲精品久久久久久久久久久 | 特大巨交吊性xxxx | 性欧美又大又长又硬 | 精品动漫一区二区三区的观看方式 | 少妇久久久久久被弄高潮 | 天天操天天舔天天干 | 欧美成人免费一级 | 国产精品夫妻 | 久久久www | 五色天婷婷 | 欧美精品免费一区二区 | 麻豆免费观看网站 | 不卡av在线| 国外成人性视频免费 | 强开小受嫩苞第一次免费视频 | 91精品一区二区三区在线观看 | 河北彩花69xx精品一区 | 翔田千里一区二区 | 无码国产精品一区二区免费式直播 | 秋霞精品一区二区三区 | 久久久久久免费观看 | 色婷婷网| 手机av网| 日韩一区二区影视 | 黄色在线观看免费视频 | av影片在线播放 | 亚洲美女屁股眼交3 | 国产又猛又粗 | 99色亚洲| 国产在线不卡av | 成人免费看片98欧美 | 天天色天天 | 九九热国产 | 亚洲精品.www | 久久久久久久久久久网站 | 一区二区日本 | 欧美 日韩 人妻 高清 中文 | 色就是色av | 97无码精品人妻 | 十八岁世界在线观看高清免费韩剧 | 国产一区二区在线观看免费 | 国产三级精品视频 | 激情五月婷婷小说 | 亚洲嫩草影院 | 91蝌蚪| 美女视频黄的免费 | 亚洲人免费 | 日韩人妻精品无码一区二区三区 | 在线成人av | 无码国产精品久久一区免费 | www.尤物| 欧美成人午夜精品久久久 | 性视频播放免费视频 | 午夜精品久久久久久久99老熟妇 | 亚州视频在线 | 男人网站在线观看 | 露脸啪啪清纯大学生美女 | 欧美日韩一区二区视频观看 | 天堂а√在线最新版中文在线 | 动漫av一区二区 | 亚洲三级视频 | 91手机视频 | 自拍偷拍导航 | 一级黄色片视频 | 老司机午夜免费精品视频 | 亚洲第七页 | 亚洲AV蜜桃永久无码精品性色 | 末发成年娇小性xxxxx | 国模私拍xvideos私拍 | av免费在线观看网址 | 美女的胸给男人玩视频 | 色哟哟国产精品 | 无套暴操 | 亚洲国产精品女人 | 国产精品无人区 | 打美女白嫩屁屁网站 | 91久久在线 | 99久久久成人国产精品 | 成人在线免费视频 | 老熟妇高潮一区二区三区 | 狠狠干2019| 精品中文字幕av | 无码精品国产一区二区三区免费 | 国产网站免费看 | 国产精品扒开做爽爽爽的视频 | 嫩草视频在线看 | 伊人中文在线 | 五月婷婷综合久久 | 国产91在线视频 | 国产精品国产一区二区三区四区 | 99热这里 | 亚洲精品中文字幕在线 | 国产亚洲综合在线 | 日本在线视频观看 | 中文字幕一二三区 | 成人97|