1、复习 socket() 函数
int socket( int domain, int type, int protocol );
domain:套接字使用的协议族
一般用AF_INET IPv4互联网协议族
AF_INET6 IPv6互联网协议族
type:套接字数据传输类型信息
SOCK_STREAM 面向连接的TCP套接字
特征:
传输过程中数据不会消失。
按序传输数据。
传输的数据不存在数据边界( Boundary )。
=》可靠的、按顺序传递的、基于字节的面向连接的数据传输方式的套接字。
在SOCK_STREAM 中,read函数和write函数的调用次数并无太大意义。
SOCK_DGRAM 面向消息的UDP套接字
特征:
强调快速传输而非传输顺序;
传输的数据可能丢失也可能损毁;
传输的数据有数据边界;
限制每次传输的数据大小;
=》 不可靠的、不按序传递的、以数据的高速传输为目的的套接字。
Protocol 计算机间通信中使用的协议信息
一般就写0。
TCP套接字
int tcp_socket = socket(PF_INET,socK_STREAM,IPPROTO_TCP);
参数PF_INET指IPv4网络协议族,SOCK_STREAM是面向连接的数据传输。满足这2个条件的协议只有IPPROTO_TCP,因此可以如下调用socket函数创建套接字,这种套接字称为TCP套接字。
UDP套接字
int udp_socket = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
SOCK_DGRAM指的是面向消息的数据传输方式,满足上述条件的协议只有IPPROTO_UDP。因此,可以如下调用socket函数创建套接字,这种套接字称为UDP套接字。
2、课后习题
1)什么是协议?在收发数据中定义协议有何意义?
协议就是为了完成数据交换而定好的约定。因此,定义协议意味着对数据传输所必需的的承诺进行定义。
2)面向连接的TCP套接字传输特性有3点,请分别说明。
传输过程中数据不会丢失
按序传输数据
传输的数据不存在数据边界(Boundary)
5) 何种类型的套接字不存在数据边界?这类套接字接收数据时需要注意什么?
连接指向型TCP套接字不存在数据边界。因此输入输出函数的响应次数不具有意义。重要的不是函数的响应次数,而是数据的收发量。因此,必须将传输数据的量和接收数据的量制作成编码,保证发送数据的量和接收数据的量是一致的,特别要注意是制作依赖函数响应次数判断代码。