Tcp
tcp进行网络通信在很多部分和udp通信时很相似的
大纲
init
初始化和udp很相似
就是socket的第二个参数时sock_stream
除了上面这些
litsen
Tcp依然还需要litsen接口
监听就是有点像接电话,有人打进来电话你就要接
start
accept
accept的返回值是有些不同的,相对于udp里面的recvfrom
要是获取成功会返回一个文件描述符
我们接下来区分一下这两个描述符
- 监听 fd = 门口专门负责接客的拉客小哥
小哥只干一件事:接待刚走完完整握手流程的客人,他不陪客人吃饭聊天,不点菜。 小哥站在门口,只看【等候椅子】。
- cfd(accept 返回的文件描述符) = 专属服务员,每来一组客人,就分配一个全新专属服务员,专门对接这一桌客人,点菜、上菜、聊天收发数据全部由这个服务员完成。
接下来再处理sockfd
为了做到回显的效果
用read读
用write来写,做到回显的效果
客户端
服务端:开店 (bind)→开门迎客 (listen)→接待客人 (accept)
客户端:我要主动出门,去找那家店(服务端)
第 1 步:main 入口,参数怎么设计?
客户端需要知道两件事:服务端 IP、服务端端口,才能找过去。
让客户自己传入相关的参数
第 2 步:创建 socket 文件描述符
客户端同样先要调用socket()!
注意tcp这里第二个参数是sock_stream
第 3 步:填充服务端的 sockaddr_in 结构体
⚠️注意!!这里填的是服务端的地址信息,不是自己的!(和服务端 bind 完全不一样) 服务端 bind 填自己的地址;客户端 connect 结构体填对方(服务器)。
这里用我们自己封装的类来实现
第 4 步:调用 connect () —— 客户端核心函数
第 5 步:连接成功之后干什么?业务逻辑
客户将自己要传达的信息写道sockfd