socket() 建立 Socketsetsockopt() 設定屬性(可選,如 SO_REUSEADDR)bind() 綁定 IP:Portlisten() 進入監聽狀態accept() 接受客戶連線,取得新連線 Socketsend()/recv() 或 read()/write() 收發資料close() 關閉連線 Socketclose() 關閉監聽 Socketsocket()setsockopt()(可選)bind()(可選,指定本地 IP/Port)serv_addr 目標 IP:Portconnect() 發起連線send()/recv() 收發資料close() 關閉 Socketsocket()setsockopt()(可選)bind()recvfrom() 接收資料close()socket()setsockopt()(可選)bind()(可選)to_addr 目標 IP:Portsendto() 發送資料close()netstat -an:顯示所有連線、監聽埠、路由表。telnet ip port:手動測試 TCP 服務可達性。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];
};
struct hostent {
char *h_name; // 官方域名
char **h_aliases; // 別名陣列
int h_addrtype; // AF_INET
int h_length; // 位址長度
char **h_addr_list; // 位址列表
};
| 函式 | 用途 | 關鍵參數 | 回傳 |
|---|---|---|---|
| socket | 建立 Socket | domain=AF_INET, type=SOCK_STREAM/DGRAM, protocol=0 | sockfd / -1 |
| bind | 綁定本地位址 | sockfd, my_addr, addrlen | 0 / -1 |
| connect | TCP 連線 | sockfd, serv_addr, addrlen | 0 / -1 |
| listen | 監聽 | sockfd, backlog(預設 20) | 0 / -1 |
| accept | 接受連線 | sockfd, addr, addrlen | 新 sockfd / -1 |
| send | TCP 發送 | sockfd, msg, len, flags=0 | 送出位元組 / -1 |
| recv | TCP 接收 | sockfd, buf, len, flags=0 | 收到位元組 / 0(EOF) / -1 |
| sendto | UDP 發送 | sockfd, msg, len, flags, to, tolen | 送出位元組 / -1 |
| recvfrom | UDP 接收 | sockfd, buf, len, flags, from, fromlen | 收到位元組 / -1 |
| close | 關閉 Socket | sockfd | 0 / -1 |
| shutdown | 單向關閉 | sockfd, how(0=停收/1=停送/2=雙向) | 0 / -1 |
| gethostbyname | 域名解析 | name | hostent* / NULL |
| inet_pton | 字串→網路序 | family, strptr, addrptr | 1/0/-1 |
| inet_ntop | 網路序→字串 | family, addrptr, strptr, len | strptr / NULL |
my_addr.sin_port = 0; // 核心自動挑未用 Port
my_addr.sin_addr.s_addr = INADDR_ANY; // 綁定所有介面