基于TEC傳輸層的編程模型
服務(wù)器端編程模型
- 創(chuàng)建一個用于網(wǎng)絡(luò)通訊的設(shè)備 通訊端點(diǎn) socket(2)
- 將這個通訊端點(diǎn)和本機(jī)的ip地址傻咖、端口號綁定 bind(2)
- 在這個通訊端點(diǎn)上監(jiān)聽客戶端連接的到來,放入緩沖區(qū)隊列 listen(2)
- 從緩沖區(qū)隊列中取出一個客戶端連接剖淀,返回連接描述符 accept(2)
- 使用連接描述符和客戶端通訊 read(2) write(2)
- 關(guān)閉連接描述符,終止和客戶端的通訊 close(2)
客戶端編程模型
- 創(chuàng)建一個用于網(wǎng)絡(luò)通訊的設(shè)備(通訊端點(diǎn)) socket(2)
- 使用這個端點(diǎn)連接到服務(wù)器(IP地址和端口號) connet(2)
- 向服務(wù)器發(fā)送消息
- 等待服務(wù)器端的響應(yīng)消息
- 處理服務(wù)器的響應(yīng)消息
- 關(guān)閉設(shè)備,結(jié)束本次通訊。
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int listen(int sockfd, int backlog);
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
ssize_t read(int fd, void *buf, size_t count);
int close(int fd);
地址家族的通用結(jié)構(gòu)
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
};
ipv4的具體地址
man in.h
#include <netinet/in.h>
in_port_t uint16_t
in_addr_t uint32_t
sa_family_t <sys/socket.h>
struct in_addr{
in_addr_t s_addr;
};
struct sockaddr_in{
sa_family_t sin_family; //AF_INET.
in_port_t sin_port; //Port number.
struct in_addr sin_addr; //IP address.
};
本機(jī)字節(jié)序和網(wǎng)絡(luò)字節(jié)序的轉(zhuǎn)換
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者