一、TCP介绍
TCP的特点:
- 面向连接的协议:TCP是一种可靠的、面向连接的协议,在通信之前需要建立连接,以确保数据的可靠传输。这意味着在传输数据之前,发送方和接收方之间需要建立一条可靠的连接通道。
- 流式协议:TCP将数据看作是一连串的字节流,而不是独立的数据包。这意味着在传输过程中,数据可以被分割成多个数据包进行传输,并在接收端进行重新组装。
- 可靠传输:TCP通过使用校验和、序列号和确认应答等机制,确保数据的可靠传输。如果在传输过程中发生错误或丢失,TCP会进行重传,以确保数据的完整性和准确性。
- 出错重传:当TCP接收到错误的数据包时,它会要求发送方重新发送该数据包,以确保数据的正确性。
- 确认应答:TCP使用确认应答机制来确保数据的可靠传输。当接收方收到一个数据包时,它会向发送方发送一个确认应答,表示已经收到了该数据包。
- 服务器被动连接,客户端主动连接:在TCP连接中,服务器通常处于被动状态,等待客户端的连接请求。而客户端则处于主动状态,负责发起连接请求。一旦连接建立成功,双方就可以进行数据传输。
TCP与UDP的差异

TCP与UDP流程对比

TCP编程流程
服务器端流程:
- 创建套接字(socket):使用
socket()
函数创建一个套接字,指定使用的协议族(如IPv4或IPv6)和socket类型(如流式socket)。
- 绑定套接字(bind):使用
bind()
函数将套接字与服务器的网络信息(如IP地址和端口号)进行绑定。
- 监听套接字(listen):使用
listen()
函数将套接字设置为监听状态,准备接收客户端的连接请求。
- 接受连接(accept):使用
accept()
函数阻塞等待客户端的连接请求,并返回一个新的套接字用于与该客户端进行通信。
- 进行通信(recv/send):使用
recv()
和send()
函数与客户端进行数据的接收和发送。
- 关闭套接字(close):通信完成后,使用
close()
函数关闭套接字,释放资源。
客户端流程:
- 创建套接字(socket):与服务器端相同,使用
socket()
函数创建一个套接字。
- 连接服务器(connect):使用
connect()
函数向服务器发起连接请求,指定服务器的IP地址和端口号。
- 进行通信(send/recv):连接建立后,使用
send()
和recv()
函数与服务器进行数据的发送和接收。
- 关闭套接字(close):通信完成后,使用
close()
函数关闭套接字,释放资源。
二、TCP编程-socket
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
功能:
创建一个套接字,返回一个文件描述符
参数:
domain:通信域,协议族
AF_UNIX 本地通信
AF_INET ipv4网络协议
AF_INET6 ipv6网络协议
AF_PACKET 底层接口
type:套接字的类型
SOCK_STREAM 流式套接字(tcp&#x