套接字(socket)与socket 编程
生活随笔
收集整理的這篇文章主要介紹了
套接字(socket)与socket 编程
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- 字節(jié)序:
- 主機(jī)字節(jié)序(host byte order):不同的主機(jī)有不同的字節(jié)序,x86:小端;
- 網(wǎng)絡(luò)字節(jié)序(network byte order):大端字節(jié)序;
0. 什么是套接字
- 套接字是網(wǎng)絡(luò)進(jìn)程間的通信(網(wǎng)絡(luò)進(jìn)程間通信,又叫 network IPC)接口,進(jìn)程用該接口能夠與其他進(jìn)程通信,無(wú)論是否在同一臺(tái)計(jì)算機(jī)上,
- 套接字是對(duì)通信端點(diǎn)的抽象,就像文件描述符(file descriptor)是對(duì)文件的抽象表示;
1. 基本概念
socket 可以看成是用戶進(jìn)程(Application,工作在用戶空間)與內(nèi)核網(wǎng)絡(luò)協(xié)議棧(內(nèi)核空間,kernel space)的編程接口(稱為套接口);
- 以實(shí)現(xiàn)用戶空間的應(yīng)用對(duì)內(nèi)核網(wǎng)絡(luò)協(xié)議棧提供的服務(wù)的訪問(wèn)和調(diào)用;
socket 以下的 UDP/TCP、IP、Channel 等即為內(nèi)核網(wǎng)絡(luò)協(xié)議棧;
2. IPv4 套接字地址接口
$ man 7 ipIPv4 套接字地址結(jié)構(gòu)通常也稱為“網(wǎng)際套接字地址結(jié)構(gòu)”,以sockaddr_in命名,定義在 <netinet.h>中:
struct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */in_port_t sin_port; /* port in network byte order */struct in_addr sin_addr; /* internet address */ };/* Internet address. */ struct in_addr {uint32_t s_addr; /* address in network byte order */ };- AF_INET:代表的是 IPv4 協(xié)議;
- 此外還有 Unix 域協(xié)議;
- Network byte order:網(wǎng)絡(luò)字節(jié)序;
3. 通用地址結(jié)構(gòu)
使不同協(xié)議間的套接字地址兼容。
struct sockaddr {uint8_t sin_len;sa_family_t sin_family;char sa_data[14]; }- sin_len:整個(gè) sockaddr 結(jié)構(gòu)體的長(zhǎng)度;
- sin_family:指定該地址家族;
- sa_data:由 sin_family 決定其形式;
4. 字節(jié)序轉(zhuǎn)換函數(shù)
uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t hostlong); uint16_t ntohs(uint16_t hostshort);- h:host,表示主機(jī)(主機(jī)字節(jié)序);
- n:network,表示網(wǎng)絡(luò)(網(wǎng)絡(luò)字節(jié)序);
- s:short,l:long
轉(zhuǎn)載于:https://www.cnblogs.com/mtcnn/p/9421268.html
總結(jié)
以上是生活随笔為你收集整理的套接字(socket)与socket 编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深入浅出UML类图
- 下一篇: Hadoop集群搭建及MapReduce