【Linux网络编程】TCP套接字核心函数详解|三次握手|send/recv/listen/accept接口梳理

**

Linux TCP网络编程核心API学习笔记

**


一、UDP包头与UDP特性

UDP头部一共8字节,分为4个字段:

  1. 源端口
  2. 目的端口
  3. 用户数据包长度
  4. 检查和
    头部之后紧跟应用层数据。

UDP特点:

  • 实现机制简单
  • 资源开销小
  • 无连接、不安全、不可靠,不保证数据送达。

二、TCP通信原理

TCP是面向连接的可靠传输协议,通信之前必须完成三次握手建立连接:

  1. 主动发起方发送 SYN 请求连接;
  2. 被动连接方回复 SYN+ACK,确认收到请求同时同步;
  3. 发起方回复 ACK,连接正式建立。

连接建立完成后,才可以收发业务数据。

三、TCP核心套接字API

1. socket

c 复制代码
int tcpsocket = socket(AF_INET, SOCK_STREAM, 0);
  • AF_INET:IPv4协议;
  • SOCK_STREAM:代表TCP流式套接字。
    返回套接字文件描述符,失败返回‑1。

2. connect(客户端使用:发起连接)

c 复制代码
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能 :向服务端发送连接请求

参数:

  • sockfd:socket返回套接字fd
  • addr:目标服务端地址结构体
  • addrlen:地址结构体大小
    返回:成功返回0;失败返回‑1。

3. send(发送数据)

c 复制代码
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

功能 :向已经连接好的套接字发送数据

参数:

  • sockfd:通信文件描述符
  • buf:待发送数据缓冲区首地址
  • len:要发送的数据字节长度
  • flags:标志位,填0即可
    返回:成功返回实际发送字节数;失败返回‑1。

4. recv(接收数据)

c 复制代码
ssize_t recv(int sockfd, void *buf, size_t len, int flags);

功能 :从套接字读取对端发来的数据

参数:

  • sockfd:通信文件描述符
  • buf:接收数据缓冲区
  • len:最多接收的字节数
  • flags:一般填0
    返回:
  • 0:实际收到字节数量;

  • 0:对方关闭连接;
  • -1:出错。

⚠注意:recv不会自动补字符串结束符\0,打印字符串需要手动添加buf[nret] = '\0'。

5. listen(服务端:开启监听)

c 复制代码
int listen(int sockfd, int backlog);

功能 :将socket设置为监听状态,等待客户端连接

参数:

  • sockfd:socket创建的套接字fd
  • backlog:未处理连接队列最大数目
    返回:成功返回0,失败返回‑1。

6. accept(服务端:取出连接)

c 复制代码
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

功能 :从监听队列取出一条已经完成三次握手的客户端连接。

参数:

  • sockfd:listen之后的监听套接字
  • addr:输出参数,存放客户端地址信息
  • addrlen:传入地址缓冲区大小,调用结束返回真实地址长度
    返回值:
    成功返回全新通信文件描述符confd,后续收发数据使用这个fd;失败返回‑1。

重点区分:

  • sockfd:监听套接字,只负责接新客户端,不能收发业务数据;
  • accept返回的confd:真正用来send/recv和客户端通信。

四、简单总结

  1. UDP无连接,头部8字节,开销小,传输不可靠;
  2. TCP需要三次握手建立连接,可靠传输;
  3. 客户端流程:socket → connect → send/recv;
  4. 服务端流程:socket → bind → listen → accept → send/recv;
  5. recv返回0代表对方断开,是网络编程重要判断条件。
相关推荐
碧海银沙音频科技研究院4 小时前
炬芯ATS3089X手表的HFP通话不自动路由到设备BT的问题解决
网络·人工智能·嵌入式硬件·算法
EasyDSS8 小时前
连锁扩张管控难?一套视频会议/直播/点播/集群对讲EasyDSS音视频云平台打通门店全流程数字化
网络·音视频·easydss
曦夜日长9 小时前
Git系统篇,Git本地使用(一):从“究极进化版“到三个区域的底层原理
大数据·linux·git·elasticsearch
shimly1234569 小时前
给断网无 sudo ubuntu22.04 机器安装 nodejs
linux
比兔代理10 小时前
游戏、直播、远程办公遇到动态IP怎么办?
网络
Lzg_na10 小时前
ARP 地址解析协议详解
网络·网络协议
北京盛世宏博11 小时前
通信异常深度排查:以太网温湿度设备 TCP 粘包、UDP 丢包根治方案
单片机·网络协议·tcp/ip·udp·以太网·传感器·温湿度
上海广测检测科技有限公司11 小时前
消费类智能联网设备安全分级国标征求意见要点解析:三级五维框架与跨境对标逻辑
网络·经验分享
别动我齐刘海11 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
Lsetea11 小时前
OpenSSL报certificate chain too long:error 22与verify_depth深度排查
linux·https·ssl证书·openssl·证书链