socket TCP基本参数解析

传输层协议,http应用层协议之下,适用于远程通讯

一、Socket TCP 协议创建的关键参数

在代码中一般会看到这一句:

int sock = socket(AF_INET, SOCK_STREAM, 0);

这 行函数就是建立 TCP 通信的入口,
它的 三个参数 完全决定了通信协议类型

参数名称作用在你代码中的取值
domain地址族(协议族)指定使用什么网络层协议,如 IPv4 / IPv6 / 本地通信AF_INET → 使用 IPv4
type套接字类型指定使用 TCP 或 UDPSOCK_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"服务器地址
Port8080服务器监听的端口

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_INETIPv4
类型SOCK_STREAMTCP(流式)
协议号0系统自动选择 TCP
IP"192.168.1.68"远程目标主机
端口8080远程监听端口
传输方向send/recv双向通信

四、总结一句话

使用的 TCP 协议参数主要包括:

AF_INET, SOCK_STREAM, 0, IP地址, 端口号

这些共同决定了通信是:
基于 IPv4 的 TCP 长连接远程传输。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值