传输层协议,http应用层协议之下,适用于远程通讯
一、Socket TCP 协议创建的关键参数
在代码中一般会看到这一句:
int sock = socket(AF_INET, SOCK_STREAM, 0);
这 行函数就是建立 TCP 通信的入口,
它的 三个参数 完全决定了通信协议类型。
| 参数 | 名称 | 作用 | 在你代码中的取值 |
|---|---|---|---|
domain | 地址族(协议族) | 指定使用什么网络层协议,如 IPv4 / IPv6 / 本地通信 | AF_INET → 使用 IPv4 |
type | 套接字类型 | 指定使用 TCP 或 UDP | SOCK_STREAM → TCP(面向连接) |
protocol | 传输协议编号 | 一般填 0,让系统自动匹配 | 0 → 自动匹配 TCP |
所以你的这行代码的意思是:
创建一个使用 IPv4、面向连接(TCP)的套接字。
二、后续调用中的主要参数
创建好 socket 后,你还会看到如下函数,每个也带重要参数👇
bind()
bind(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
| 参数 | 含义 |
|---|---|
sock | 套接字描述符 |
server_addr | 结构体,定义了绑定的 IP 和端口 |
sizeof(server_addr) | 地址结构体长度 |
server_addr 是一个结构体:
struct sockaddr_in {
short sin_family; // 地址族,一般为 AF_INET
unsigned short sin_port; // 端口号(要用 htons() 转换)
struct in_addr sin_addr; // IP 地址(要用 inet_addr() 或 INADDR_ANY)
char sin_zero[8]; // 填充字段
};
connect()(客户端)
connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
-
连接目标服务器。
-
server_addr包含服务器的 IP 和端口。
关键参数:
| 参数 | 示例值 | 含义 |
|---|---|---|
| IP | "192.168.1.68" | 服务器地址 |
| Port | 8080 | 服务器监听的端口 |
listen()(服务端)
listen(sock, 5);
| 参数 | 含义 |
|---|---|
sock | 已绑定的套接字 |
5 | 连接等待队列长度(最大可排队的未处理连接数) |
accept()(服务端)
int client_fd = accept(sock, (struct sockaddr*)&client_addr, &len);
| 参数 | 含义 |
|---|---|
sock | 监听套接字 |
client_addr | 客户端的地址信息(出参) |
len | 地址结构体长度 |
send() 和 recv()
send(sock, send_buf, strlen(send_buf), 0); recv(sock, recv_buf, sizeof(recv_buf), 0);
| 参数 | 含义 |
|---|---|
sock | 套接字描述符 |
send_buf / recv_buf | 发送或接收的数据缓冲区 |
flag | 通常为 0(也可设置如 MSG_DONTWAIT) |
三、完整示例一览
int sock = socket(AF_INET, SOCK_STREAM, 0); // IPv4 + TCP
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = inet_addr("192.168.1.68");
connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
send(sock, "run", strlen("run"), 0);
recv(sock, buffer, sizeof(buffer), 0);
涉及的 TCP 协议参数:
| 项目 | 参数 | 含义 |
|---|---|---|
| 地址族 | AF_INET | IPv4 |
| 类型 | SOCK_STREAM | TCP(流式) |
| 协议号 | 0 | 系统自动选择 TCP |
| IP | "192.168.1.68" | 远程目标主机 |
| 端口 | 8080 | 远程监听端口 |
| 传输方向 | send/recv | 双向通信 |
四、总结一句话
使用的 TCP 协议参数主要包括:
AF_INET, SOCK_STREAM, 0, IP地址, 端口号这些共同决定了通信是:
基于 IPv4 的 TCP 长连接远程传输。

被折叠的 条评论
为什么被折叠?



