SOCK_STREAM 是一种套接字类型,它在计算机网络编程中用于实现面向连接的、可靠的数据传输服务。流式套接字基于传输控制协议(TCP),它是因特网协议族(Internet Protocol Suite)中的一个关键组件。
以下是一些关于 SOCK_STREAM(流式套接字)的关键特点和特性:
面向连接:在数据交换开始之前,必须先建立连接。这通过“三次握手”过程来完成,在此过程中客户端和服务端相互确认对方的存在并同意进行通信。
可靠性:提供传输层的错误检测和纠正机制,如序列号、确认应答、重传机制等,确保数据包无差错、有序且不丢失地到达接收方。
双向通信:允许同时进行双向的数据传输,即双方可以互相发送和接收数据。
数据流:处理的是连续不断的字节流,没有明确的数据边界,因此数据可以任意长度传输,并由接收方以任意大小缓冲区读取。
带宽和流量控制:TCP 提供了拥塞控制和流量控制机制,能够根据网络状况动态调整数据传输速率,防止过多的数据拥堵在网络中。
资源消耗:相比于 SOCK_DGRAM(数据报套接字)使用 UDP 协议,流式套接字通常需要更多的系统资源,因为其维护连接状态和执行复杂的错误恢复机制。
在程序代码中创建流式套接字时,通常会调用 socket
函数,并指定地址家族(如 AF_INET 或 AF_INET6 表示 IPv4 或 IPv6)、套接字类型(SOCK_STREAM)以及协议(通常是 0,让操作系统选择正确的协议,对于 SOCK_STREAM,这意味着选择 TCP)。例如:
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);