当前位置:   article > 正文

TCP/IP网络编程笔记-ch5.基于TCP的服务器端 客户端_tcp/ip网络编程第5章为什么能直接接收整数

tcp/ip网络编程第5章为什么能直接接收整数

知识点

数据传输

客户端连接到服务器端后以1字节整数形式传递待算数字个数
客户端向服务器端传递的每个整数型数据占用4字节
传递整数型数据后接着传递运算符。运算符占用1字节
选择字符+、-、*之一传递
服务器端以4字节整数型向客户端传回运算结果
客户端得到运算结果后终止与服务器端的连接

因为以4字节整数型为单位进行数据传递,所以op_client.c中:

#define RLT_SIZE 4 //字节大小数
read(sock, &result, RLT_SIZE);//以一个4字节整数的数据为返回结果
  • 1
  • 2

TCP原理

TCP套接字中的I/O缓冲

调用write函数时,数据将转移到输出缓冲,在适当的时间传向对方的输入缓存。对方调用read函数从输入缓存中读取数据。
I/O特性:

I/O缓冲在每个TCP套接字中单独存在
I/O缓冲在创建套接字时自动生成
即使关闭套接字也会继续传递输出缓存中遗留的数据
关闭套接字将丢失输入缓存中的数据
  • 1
  • 2
  • 3
  • 4

当客户端输入缓冲为50字节,服务器传输了100字节时:
TCP控制数据流,因为TCP中有活动窗口(Window)协议,会确定客户端已经接收到多少和能继续接收多少,以此调控数据传输的速率,不必担心TCP因为数据缓冲溢出导致丢失数据。

TCP三个内部工作原理

建议看计算机网络(第8版)谢希仁 第五章 中的TCP部分

SYN(synchronous建立联机)  
ACK(acknowledgement 确认)  
FIN(finish结束)  
SEQ(sequence number 序列号)
  • 1
  • 2
  • 3
  • 4

1.与对方套接字的连接

TCP套接字从创建到消失经过3步:

与对方套接字建立连接  
与对方套接字进行数据交换  
断开与对方套接字的连接
  • 1
  • 2
  • 3

这实际通信过程中经过3次对话过程也叫"Three-way handshaking(三次握手)"。

2.与对方主机的数据交换

ACK号 -> SEQ号 + 传递的字节数 + 1
重传:TCP套接字启动计时器等待ACK应答,相应计时器发生超时则重传。

3.断开与套接字的连接

套接字A向套接字B传递断开连接的消息,套接字B发出确认收到的消息,然后向套接字A传递可断开连接的消息,套接字A同样发出确认消息。

A:FIN(A:我断开)
B:ACK(B:收到)

B:FIN(B:我断开)
A:ACK(A:收到)
  • 1
  • 2
  • 3
  • 4
  • 5

双方各发送一次FIN消息后断开连接。此过程经4个阶段,又称四次握手(Four-way handshaking)。

实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tBr6XG5P-1641994165655)(https://note.youdao.com/yws/res/6/WEBRESOURCEe95650418d26b0603f6a191dc4443256)]

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号