20 網路IPC 套接字 1

2021-08-09 20:08:44 字數 2833 閱讀 3767

1、套接字是通訊端點的抽象。

//建立套接字,成功則返回描述符

int socket(int domain, int

type, int protocol);

(1)domain域確定通訊的特性,如位址格式,af=address family

af_inet ipv4網際網路域

af_inet6 ipv4網際網路域

af_unix unix域

af_unspec 未指定

(2)type套接字型別,進一步確定通訊特徵

sock_dgram 固定長度資料報,兩個程序不需要連線,只需要向其套接字傳送乙個報文

sock_ram ip協議的資料報介面,之間訪問ip層,繞過傳輸協議,應用自己構造協議頭部

sock_seqpacket 固定長度、有序、面向連線的的報文傳遞

sock_stream 位元組流,需要建立連線

(3)protocol協議,為0則根據域和套接字型別自動選擇協議

ipproto_ip ipv4網際協議

ipprotp_ip6 ipv6網際協議

ipprotp_icmp 網際網路控制報文協議

ipprotp_raw 原始ip資料報協議

ipprotp_tcp 傳輸控制協議

ipprotp_udp 使用者資料報協議

//禁止套接字的io(io指讀和寫)

int shutdown(int sockfd, int how);

2、位元組序:印第安序,intel處理器一般為小端,tcp/ip協議棧使用大端

大端:低位址放高位元組,從低位址開始讀數

小端:低位址放低位元組

程序標誌由兩部分組成:計算機網路位址;計算機上用埠號表示的服務

//htonl:host to net long

uint32_t htonl(uint32_t hostint32);

uint16_t htons(uint16_t hostint16);

uint32_t ntohl(uint32_t netint32);

uint16_t ntohs(uint16_t netint16);

3、位址格式

不同格式位址會被強制轉換成乙個通用的位址結構srtuct sockaddr。linux中ipv4網際網路域中的套接字

struct sockaddr_in;

struct in_addr;

//二進位制位址格式與點分十進位制字元轉換

const

char *inet_ntop(int domain, const

void *restrict addr, char *restrict str, socklen_t size);

int inet_pton(int domain, const

void *restrict str, void *restrict str);

4、位址查詢

//主機資訊

struct hostent

//網路資訊

struct netent

//協議資訊

struct protoent;

//服務資訊

服務是由位址的埠號部分表示的,每個服務由乙個唯一的總所周知的埠號支援。

struct servent;

struct addrinfo;

//將乙個主機名和乙個服務名對映到乙個位址

//提供host主機名(ip)和service服務名(pid),hint為篩選模板,res為返回值

int getaddrinfo(const

char *restrict host, const

char *restrict service, const

struct addrinfo *restrict hint, struct addrinfo **restrict res);

//關聯位址和套接字

int bind(int sockfd, const

struct sockaddr *addr, socklen_t len);

//發現繫結在套接字上的位址

int getsockname(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp);

//套接字已經和對等方連線時,找到對方位址

int getpeername(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp);

//客戶端向伺服器端-建立連線

//addr:想與之通訊的伺服器位址,伺服器必須繫結到乙個想與之連線的位址上

int connect(int sockfd, const

struct sockaddr *addr, socklen_t len);

//伺服器表示可以接收連線請求

//backlog提示伺服器未完成請求連線的數量

int listen(int sockfd, int backlog);

//建立連線

//返回請求連線的客戶端套接字描述符

int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len);

呼叫accept,沒有請求到達會一直阻塞直到乙個請求到達。伺服器可以使用poll或select等待乙個請求到達。

網路IPC 套接字

1.套接字是通訊端點的抽象。與應用程式要用檔案描述符訪問檔案一樣,訪問套接字也需要用套接字描述符。套接字描述符在unix系統是用檔案描述符實現的。要建立乙個套接字,可以呼叫socket函式。include int socket int domain,int type,int protocol 返回值...

網路IPC 套接字

套接字描述符 includeint socket int domain,int type,int prootocol 返回值 若成功,返回檔案 套接字 描述符,若出錯,返回 1域 描述af inet ipv4 網際網路域 af inet6 ipv6網際網路域 af unix unix域 af ups...

UNIX 網路IPC套接字

unix高階環境程式設計 linux秉承著萬物皆檔案的思想,把套接字也弄成了以檔案描述符形式描述的的檔案。1.int socket int domain,int type,int protocol domain分af inet,af inet6,af unix,af upspec 未指定 type分...