第二章套接字类型与协议设置

2.1 套接字协议及其数据传输特性

协议是计算机间对话必备的通信原则,是为了完成数据交换而定好的约定。

创建套接字

#include<sys/socket.h>

int socket(int domain, int type, int protocol)
//成功时返回文件描述符,失败返回-1
- domain 套接字中使用的协议族信息
- 套接字数据传输类型
- 计算机通信中使用的协议信息

第一个参数指的是协议分类信息,也称为协议族,是一类协议,其中包含很多协议。一般使用的是PF_INET。
在这里插入图片描述
而套接字中最终采用的协议(具体的)是通过第三个参数指定,也就是某一类协议(第一个参数)中的某个具体协议。

套接字类型

第三个参数套接字类型指的是套接字的数据传输方式,使用第一个参数决定了协议族信息,但并不能同时决定数据传输的方式,以为协议族中也存在多种数据传输方式。

两种具有代表性的数据传输方式:面向连接的套接字(SOCK_STREAM)、面向消息的套接字(SOCK_DGRAM)。

面向连接的套接字

向socket函数第二个参数传递SOCK_STREAM,将创建面向连接的套接字。

面向连接的套接字的特点:

  • 传输过程中数据不会丢失。
  • 按序传输数据。
  • 传输的数据不存在数据边界。

收发数据的套接字内部有缓冲区,也就是字节数组,数据会先保存在该数组中。收到数据并不意味着马上调用read函数,有可能等数组填满,调用一次read函数读取全部数据,也有可能调用多次。
在这里插入图片描述

面向消息的套接字

socket函数第二个参数传递SOCK_DGRAM,则创建面向消息的套接字。

它的特点:

  • 强调快速传输而非传输顺序。
  • 传输的数据可能丢失也可能损毁。
  • 传输的数据有数据边界。
  • 限制每次传输的数据大小。

协议的最终选择

一般情况下有了第一个参数和第二个参数就可以确定具体要使用的协议,因为一个协议族中不同的协议有不同的数据传输方式(套接字),那么仅靠数据传输方式就可以确定指定的协议族中某个具体协议。此时设置第三个参数为0。
但是当遇到同一个协议族中存在多个数据传输方式相同的协议。即数据传输方式相同,但是协议不同,此时就需要第三个参数指定具体协议信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值