2023.7.6
第2章 套接字类型与协议设置
2.1 套接字协议及其数据传输特性
协议:计算机间对话必备的通信规则,即为了完成数据交换而定好的约定。
socket函数的三个参数:int socket(int domain, int type, int protocol)
- domain:套接字中使用的协议族信息。 常见协议族有PE_INET ipv4互联网协议族
- type:套接字数据传输类型信息
- protocol:计算机间通信中使用的协议信息
套接字类型1:面向连接的套接字(SOCK_STREAM) 其有下列特征:
- 传输过程数据不丢失
- 按序传输数据
- 传输的数据不存在数据边界
通过套接字传输的数据将保存到一个缓冲数组中,因此收到数据并不意味着马上调用read函数,只要不超过数组容量,则有可能在数据填充满缓冲后通过1次read函数调用读取全部,也有可能分成多次read函数调用进行读取。
一句话概括面向连接的套接字:可靠的、按序传递的、基于字节的、面向连接的数据传输方式的套接字。
套接字类型2:面向消息的套接字(SOCK_DGRAM) 其有下列特征:
- 强调快速传输而非传输顺序。
- 传输的数据可能丢失和损毁
- 传输的数据有数据边界
- 限制每次传输的数据大小
存在数据边界意味着接收数据的次数应和传输次数相同。
一句话概括面向消息的套接字:不可靠的、不按序传递的、以数据的高速传输为目的的套接字。
创建TCP套接字:int tcp_ socket = socket(PF_ INET, SOCK_ STREAM, IPPROTO TCP);
创建UDP套接字:int udp_ socket = socket(PF_ INET, SOCK_ DGRAM,IPPROTO UDP);
实验:
服务器端发送了13字节的数据,客户端调用13次read函数进行读取。