Linux/TCP编程流程

0 引言

本文记录在linux平台下,使用C++进行网络编程的第一篇文章。从tcp编程流程出发,引出C++网络编程相关的知识,如果有需要会结合《TCP/IP详解 》进行部分原理讲解。

1 Socket函数总结

本文及以后文章中可能用到的socket函数如下

接口名

功能简述

socket()

创建和初始化一个新的socket

bind()

将套接字与特定的本地 IP 地址和端口号相关联

listen()

在服务器上用于使 TCP 套接字侦听新连接

connect()

用于在客户端设置远程地址和端口。 在 TCP 的情况下,它也建立一个连接

accept()

在服务器上用于为到达的 TCP 连接创建新套接字

send() /recv()

用于通过套接字发送和接收数据

sendto() / recvfrom()

用于从没有绑定远程地址的套接字发送和接收数据

close()

用于关闭套接字。 在 TCP 的情况下,这也会终止连接

shutdown()

用于关闭 TCP 连接的一侧, 确保有序的连接关闭很有用

select()/epoll()

用于等待一个或多个套接字上的事件

getnameinfo() / getaddrinfo()

提供一种独立于协议的方式来处理主机名和地址

setsockopt()

用于更改一些套接字选项

fcntl()

用于获取和设置一些套接字选项

2 Tcp编程流程

TCP编程的具体流程如下图所示

 具体来说,可分为 客户端编程和服务端编程(C/S模型)

针对客户端编程,其流程解释如下:

  1. 获得服务端地址(ip/port),此处一般通过getaddrinfo()接口获得
  2. 调用socket()接口创建新的socket
  3. 调用connect()建立新连接
  4. 调用send()和recv()接口同服务端交换数据
  5. 调用close()接口关闭连接

针对服务端编程,其流程解释如下:

TCP server需要在特定地址侦听连接的到来

  1. 调用getaddrinfo()获取侦听的地址
  2. 调用socket()创建侦听套接字
  3. 套接字必须绑定到监听 IP 地址和端口,这个由bind()接口完成
  4. listen(),这会使套接字处于侦听新连接的状态

  5. accept(),它将等待客户端与服务器建立连接。 建立新连接后,accept() 返回一个新套接字

  6. send() 和recv()接口同客户端交换数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qls315

感觉好可打赏几毛钱增强更新动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值