基于TEC傳輸層的編程模型

基于TEC傳輸層的編程模型

服務(wù)器端編程模型

  1. 創(chuàng)建一個(gè)用于網(wǎng)絡(luò)通訊的設(shè)備 通訊端點(diǎn) socket(2)
  2. 將這個(gè)通訊端點(diǎn)和本機(jī)的ip地址、端口號(hào)綁定 bind(2)
  3. 在這個(gè)通訊端點(diǎn)上監(jiān)聽客戶端連接的到來,放入緩沖區(qū)隊(duì)列 listen(2)
  4. 從緩沖區(qū)隊(duì)列中取出一個(gè)客戶端連接,返回連接描述符 accept(2)
  5. 使用連接描述符和客戶端通訊 read(2) write(2)
  6. 關(guān)閉連接描述符,終止和客戶端的通訊 close(2)

客戶端編程模型

  1. 創(chuàng)建一個(gè)用于網(wǎng)絡(luò)通訊的設(shè)備(通訊端點(diǎn)) socket(2)
  2. 使用這個(gè)端點(diǎn)連接到服務(wù)器(IP地址和端口號(hào)) connet(2)
  3. 向服務(wù)器發(fā)送消息
  4. 等待服務(wù)器端的響應(yīng)消息
  5. 處理服務(wù)器的響應(yīng)消息
  6. 關(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容