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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux网络编程Internet Socket地址,套接字,和函数

發(fā)布時間:2023/11/30 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux网络编程Internet Socket地址,套接字,和函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章內(nèi)容節(jié)選《linux/UNIX 系統(tǒng)網(wǎng)絡(luò)編程》

Internet domain socket地址有兩種:IPv4 IPv6

IPv4被存儲在結(jié)構(gòu)體中, 該結(jié)構(gòu)體在 netinet/in.h 中進(jìn)行定義

cd usr/include/netinet/in.h struct in_addr {in_addr_t s_addr; //32位IPv4地址 }struct sockaddr_in {sa_family_t sin_family; //地址族in_port_t sin_port; //16位TCP/UDP端口號struct in_addr sin_addr; //32位IP地址unsigned char __pad[X]; //不用這個 };

sin_family

每種協(xié)議族適用的地址族均不同.如IPv4使用4字節(jié)地址族,IPv6使用16字節(jié)地址族.sa_family是協(xié)議簇通常大多用的是都是AF_INET,表示tcpip協(xié)議。

用法

struct sockaddr_in server_address; server_address.sin_family=AF_INET; AF_INET(又稱 PF_INET)是 IPv4 網(wǎng)絡(luò)協(xié)議的套接字類型 AF_INET6 則是 IPv6 的

sin_port

以網(wǎng)絡(luò)字節(jié)序保存16位端口號
為了使網(wǎng)絡(luò)程序具有可移植性,使同樣的C代碼在大端和小段計算機(jī)上編譯后都能正常運行,可以調(diào)用以下庫函數(shù)做網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的轉(zhuǎn)換。

#include <arpa/inet.h> uint16_t htons(uint16_t hostshort); h表示Host,n表示Network,l表示32為長整數(shù),s表示16位短整數(shù) 如果主機(jī)是小端字節(jié)序,這些函數(shù)將參數(shù)做相應(yīng)的大小端轉(zhuǎn)換后返回 如果主機(jī)是大端字節(jié)序,這些函數(shù)不做轉(zhuǎn)換,將參數(shù)直接返回

用法:

int main(int argc, char* argv[]) { //輸入./a.out 192.168.42.1 9000 addr.sin_port = htons(atoi(argv[2])); }

sin_addr

用法

server_address.sin_addr.s_addr=inet_addr("127.0.0.1");

以網(wǎng)絡(luò)字節(jié)序保存32位IP地址信息.

socket套接字:

socket起源于Unix,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”,都可以用“打開open –> 讀寫write/read –> 關(guān)閉close”模式來操作。Socket就是該模式的一個實現(xiàn),
socket即是一種特殊的文件,一些socket函數(shù)就是對其進(jìn)行的操作(讀/寫IO、打開、關(guān)閉).
說白了Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。

套接字描述符

其實就是一個整數(shù),我們最熟悉的句柄是0、1、2三個,0是標(biāo)準(zhǔn)輸入,1是標(biāo)準(zhǔn)輸出,2是標(biāo)準(zhǔn)錯誤輸出。0、1、2是整數(shù)表示的,對應(yīng)的FILE *結(jié)構(gòu)的表示就是stdin、stdout、stderr

文件描述符對象FILE *
0標(biāo)準(zhǔn)輸入Standard Inputstdin
1標(biāo)準(zhǔn)輸出Standard Outputstdout
2標(biāo)準(zhǔn)錯誤Standard Errorstderr

基于TCP/IP的服務(wù)器端/客戶端函數(shù)調(diào)用關(guān)系

TCP客戶端的默認(rèn)函數(shù)調(diào)用順序

  • socket()創(chuàng)建套接字
  • connect()請求連接
  • read()/write()交換數(shù)據(jù)
  • close()斷開連接

TCP服務(wù)器端的默認(rèn)函數(shù)調(diào)用順序

  • socket()創(chuàng)建套接字
  • bind()分配套接字地址
  • listen()等待連接請求狀態(tài)
  • accept()允許連接
  • read()/write()數(shù)據(jù)交換
  • close()斷開連接

函數(shù)

創(chuàng)建socket套接字(TCP/UDP,客戶端+服務(wù)器)

int socket(int domain,int type,int protocol);

綁定端口號(TCP/UDP,服務(wù)器)

int bind(int socket,const struct sockaddr *address,socklen_t address_len);

開始監(jiān)聽socket(TCP,服務(wù)器)

int listen(int socket,int backlog);

接收請求(TCP,服務(wù)器)

int accept(int socket,struct sockaddr *address,socklen_t *address_len);

建立連接(TCP,客戶端)

int connect(int sockfd,const struct sockaddr *addr,socklen_t addrlen);

總結(jié)

以上是生活随笔為你收集整理的linux网络编程Internet Socket地址,套接字,和函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。