【網路編程】TCPIP_1_快速入門


前言

說明:

  • 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);

參考: