linux网络编程Internet Socket地址,套接字,和函数
文章內(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)換。
用法:
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
| 0 | 標(biāo)準(zhǔn)輸入 | Standard Input | stdin |
| 1 | 標(biāo)準(zhǔn)輸出 | Standard Output | stdout |
| 2 | 標(biāo)準(zhǔn)錯誤 | Standard Error | stderr |
基于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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用的友元重载运算符OSTREAM
- 下一篇: Linux的sort命令用法