Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 網路程式設計:TCP/UDP Socket 完整流程與 API 速查表

編輯:Linux 教學

TCP 伺服端標準流程

  1. socket() 建立 Socket
  2. setsockopt() 設定屬性(可選,如 SO_REUSEADDR)
  3. bind() 綁定 IP:Port
  4. listen() 進入監聽狀態
  5. accept() 接受客戶連線,取得新連線 Socket
  6. send()/recv() 或 read()/write() 收發資料
  7. close() 關閉連線 Socket
  8. close() 關閉監聽 Socket

TCP 客戶端標準流程

  1. socket()
  2. setsockopt()(可選)
  3. bind()(可選,指定本地 IP/Port)
  4. 填寫 serv_addr 目標 IP:Port
  5. connect() 發起連線
  6. send()/recv() 收發資料
  7. close() 關閉 Socket

UDP 伺服端流程

  1. socket()
  2. setsockopt()(可選)
  3. bind()
  4. 迴圈 recvfrom() 接收資料
  5. close()

UDP 客戶端流程

  1. socket()
  2. setsockopt()(可選)
  3. bind()(可選)
  4. 填寫 to_addr 目標 IP:Port
  5. sendto() 發送資料
  6. close()

常用網路除錯指令

  • netstat -an:顯示所有連線、監聽埠、路由表。
  • telnet ip port:手動測試 TCP 服務可達性。

關鍵資料結構

IPv4 Socket 位址

struct sockaddr_in {
    sa_family_t    sin_family;   // AF_INET
    in_port_t      sin_port;     // 網路序 Port
    struct in_addr sin_addr;     // IPv4 位址
    char           sin_zero[8];  // 填 0 對齊
};
struct sockaddr {          // 通用位址結構
    sa_family_t sa_family;
    char        sa_data[14];
};

DNS 解析結果

struct hostent {
    char  *h_name;        // 官方域名
    char **h_aliases;     // 別名陣列
    int    h_addrtype;    // AF_INET
    int    h_length;      // 位址長度
    char **h_addr_list;   // 位址列表
};

核心 API 速查

函式用途關鍵參數回傳
socket建立 Socketdomain=AF_INET, type=SOCK_STREAM/DGRAM, protocol=0sockfd / -1
bind綁定本地位址sockfd, my_addr, addrlen0 / -1
connectTCP 連線sockfd, serv_addr, addrlen0 / -1
listen監聽sockfd, backlog(預設 20)0 / -1
accept接受連線sockfd, addr, addrlen新 sockfd / -1
sendTCP 發送sockfd, msg, len, flags=0送出位元組 / -1
recvTCP 接收sockfd, buf, len, flags=0收到位元組 / 0(EOF) / -1
sendtoUDP 發送sockfd, msg, len, flags, to, tolen送出位元組 / -1
recvfromUDP 接收sockfd, buf, len, flags, from, fromlen收到位元組 / -1
close關閉 Socketsockfd0 / -1
shutdown單向關閉sockfd, how(0=停收/1=停送/2=雙向)0 / -1
gethostbyname域名解析namehostent* / NULL
inet_pton字串→網路序family, strptr, addrptr1/0/-1
inet_ntop網路序→字串family, addrptr, strptr, lenstrptr / NULL

自動取得本機 IP 與隨機 Port 技巧

my_addr.sin_port = 0;                 // 核心自動挑未用 Port
my_addr.sin_addr.s_addr = INADDR_ANY; // 綁定所有介面
Copyright © Windows教程網 All Rights Reserved