前言

說明:

  • demo 基於 Linux。

1. 快速入門

以下步驟簡略了很多細節,但是通過下面的幾個函式就能構建出簡單的TCP/IP網路程式設計demo了。

原文:李柱明部落格

1.1 服務端程式設計簡要步驟

網路程式設計中和接受連線請求的套接字建立過程可整理如下:

  1. 第一步:呼叫 socket 函式建立套接字。
  2. 第二步:呼叫 bind 函式分配IP地址和埠號。
  3. 第三步:呼叫 listen 函式轉換為可接受請求狀態。
  4. 第四步:呼叫 accept 函式受理套接字請求。
  5. 第五步:呼叫 read、write 讀寫函式進行資料互動。
  6. 第六步:呼叫 close 函式關閉套接字。

1.2 客戶端程式設計簡要步驟

客戶端請求連線簡要步驟:

  1. 第一步:呼叫 socket 函式建立套接字。
  2. 第二步:呼叫 connect 函式向服務端傳送連線請求。
  3. 第三步:呼叫 read、write 讀寫函式進行資料互動。
  4. 第四步:呼叫 close 函式關閉套接字。

1.3 參考

如 TCP 客戶端和服務端:

部分參考函式及其標頭檔案(基於linux):

// 第一步:呼叫 socket 函式建立套接字。
//成功時返回檔案描述符,失敗時返回-1
#include <sys/socket.h>
int socket(int domain, int type, int protocol); // 第二步:呼叫 bind 函式分配IP地址和埠號。
//成功時返回0,失敗時返回-1
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen); /* 補充 client 部分 */
//成功時返回0,失敗時返回-1
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); // 第三步:呼叫 listen 函式轉換為可接受請求狀態。
//成功時返回0,失敗時返回-1
#include <sys/socket.h>
int listen(int sockfd, int backlog); // 第四步:呼叫 accept 函式受理套接字請求。
//成功時返回檔案描述符,失敗時返回-1
#include <sys/socket.h>
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen); // 第五步:呼叫讀寫函式進行資料互動。
/* 成功時返回接收的位元組數(但遇到檔案結尾則返回 0),失敗時返回 -1
fd : 顯示資料接收物件的檔案描述符
buf : 要儲存接收的資料的緩衝地址值。
nbytes : 要接收資料的最大位元組數
*/
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t nbytes); /* 成功時返回寫入的位元組數 ,失敗時返回 -1
fd : 顯示資料傳輸物件的檔案描述符
buf : 儲存要傳輸資料的緩衝值地址
nbytes : 要傳輸資料的位元組數
*/
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t nbytes); // 第六步:呼叫 close 函式關閉套接字。
/* 成功時返回 0 ,失敗時返回 -1
fd : 需要關閉的檔案或套接字的檔案描述符
*/
#include <unistd.h>
int close(int fd);

參考: