您好,登錄后才能下訂單哦!
1. 字節序
網絡協議使用‘大端字節序’(起始地址存的高序字節)來傳送這些多字節整數。
#include <netinet/in.h>
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);
2. 點分十進制的ASCII碼字符串和32位的網絡字節序二進制值間轉換IPv4地址
[//下面兩個函數淘汰,寫出來幫忙過渡記憶
#include <arpa/inet.h>
//字符串符串有效則返回1,否則0
// 不足:出錯時addrptr返回 INADDR_NONE(32位1),又有手冊稱返回-1
int inet_aton(const char *strptr, struct in_addr *addrptr);
char* inet_ntoa(struct in_addr inaddr); // 不足:不可重入
]
// 優點:ipv4和ipv6都適合
// p:presentation n:numeric
#include <arpa/inet.h>
// 注意:成功返回1,輸入格式無效返回0,出錯返回-1;EAFNOSUPPORT
int inet_pton(int family, const char *strptr, void *addrptr);
// 成功返回指向結果的指針,出錯返回NULL; ENOSPC
const char* inet_ntop(int family, const void *addrptr, char *strptr, size_t len);
3. socket
#include <sys/socket.h>
int socket(int family, int type, int protocol);
int connect(int sockfd, const struct sockaddr* servaddr, socklen_t addrlen);
//bind可以指定IP地址或端口,或兩者都指定,或兩者都不指定。
//bind系統保留端口,需要root權限
int bind(int sockfd, const struct sockaddr* myaddr, socklen_t addrlen);
//返回套接字關聯的本地協議地址
int getsockname(int sockfd, struct sockaddr* localaddr, socklen_t *addrlen);
//返回套接字關聯的遠程協議地址 如accept返回的客戶sockfd的對應地址
int getpeername(itn sockfd, struct sockaddr* peeraddr, socklen_t addrlen);
int listen(int sockfd, int backlog);// 還是不明白backlog指定為什么樣的值比較好?
監聽套接字維護兩個隊列:未完成連接隊列(SYN_RCVD)和已完成連接隊列(ESTABLISHED)。
int accept(int listenfd, struct sockaddr* cliaddr, socklen_t *addrlen);
4. 建立連接后
#include <unistd.h>
int close(int sockfd);
/*
fork調用一次,返回兩次:調用進程返回子進程ID號,子進程返回0
fork的兩個用法:一是進程創建自身的一個副本;二是一個進程想要執行另一個程序,副本調用 exec把自身替換成新的程序。
*/
pid_t fork(void);
pid_t getppid(void);//獲得父進程ID
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。