int socket(int domain, int type, int protocol);
domain: 协议族信息 type: 数据传输类型 protocol: 通信中使用的协议信息
协议族
PF_INET
:IPv4协议族最常用
套接字最终使用的协议是通过第三个参数传递的
套接字类型
- SOCK_STREAM: 面向连接(stream socket)
- SOCK_DGRAM: 面向消息(datagram socket)
面向连接
- 传输过程数据不会丢失
- 按顺序到达
- 传输的数据不存在数据边界 什么是不存在数据边界? 不存在数据边界:传输端可能多次调用write()来发送数据,但接收端因为有字节数组缓存的原因,可以在缓存满的时候仅调用一次read()读取所有发送过来的数据。 总结:可靠的、按序传递的基于字节的面向连接的数据传输方式
面向消息
- 强调快速传输而非传输顺序
- 数据可能丢失或损毁
- 数据有边界
- 限制每次传输大小
面向连接的套接字创建
int tcpsock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
面向消息的套接字创建
int tcpsock = socket(PF_INET, SOCK_STREAM, IPPROTO_UDP);