实现简单TCP通信
Tcp协议实现
Tcp是面向连接的,因此服务器一般是比较“被动的”,即持续监听。
监听套接字——监听新链接和通信套接字——和客户端通信分离,分别负责不同的功能。
socket通信,都需要
IP
+Port
的方式来区分自身唯一性。只是对于客户端来说,这个端口只要是能标记自身唯一性就行。
简单的重连机制
1 |
|
Tcp中涉及的经典函数
listen()
函数
原型:
1 |
|
功能:
listen()
函数将一个已绑定(bind()
)的套接字(sockfd
)设置为被动监听状态,准备接受传入的连接请求。- 该函数通常在服务器端使用,是创建 TCP 服务器的重要步骤之一。
参数:
sockfd
:要设置为监听状态的套接字描述符,通常是通过socket()
和bind()
创建并绑定的。backlog
:指定连接队列的最大长度,表示在处理当前连接时,可以有多少个未处理的连接在队列中等待。
返回值:
- 成功时返回
0
,失败时返回-1
并设置errno
。
connect()
函数
原型
1 |
|
sockfd: 这是套接字描述符,是通过调用 socket()
函数创建的。
addr: 这是一个指向sockaddr
结构体的指针,包含了服务器的地址信息(IP 地址和端口号)。
addrlen: 这是addr
构体的长度,通常使用 sizeof(struct sockaddr_in) 或 sizeof(struct sockaddr_in6)。
accept()
函数
原型:
1 |
|
功能:
accept()
函数从监听套接字中提取一个已完成的连接请求,生成一个新的套接字用于与客户端进行通信。- 该函数阻塞调用,直到有新的连接请求进来。
参数:
sockfd
:监听套接字描述符,之前通过listen()
设置为监听状态。addr
:指向sockaddr
结构体的指针,用于存储客户端的地址信息。可以为NULL
,表示不关心客户端地址。addrlen
:指向socklen_t
类型的指针,用于存储addr
的大小。传递NULL
时,表示忽略地址长度。
返回值:
- 成功时返回一个新的套接字描述符(用于与客户端通信),失败时返回
-1
并设置errno
。
实验代码(无重连机制)
1 |
|
1 |
|
1 |
|
实现简单TCP通信
https://weihehe.top/2024/08/16/TCP通信实现/