TCPIP网络编程 -- (二)套接字类型与协议设置
TCP/IP详解 -- (二)套接字类型与协议设置
2.1套接字协议机器数据传输特性
fd1 = socket(PF_INET, SOCK_STREAM, 0);
fd3 = socket(PF_INET, SOCK_DGRAM, 0);
socket()
函数用于创建一个套接字。它有三个参数:domain
,type
和 protocol
。
domain
指定了套接字使用的协议族。例如,PF_INET
表示使用 IPv4 协议族。type
指定了套接字的类型。例如,SOCK_STREAM
表示流式套接字,而SOCK_DGRAM
表示数据报套接字。protocol
指定了套接字使用的具体协议。通常设置为0,表示使用默认协议。
这个函数返回一个文件描述符,用于表示新创建的套接字。如果创建失败,则返回 -1。
例如,在这段代码中,第一个 socket()
函数调用创建了一个流式套接字(TCP),第二个 socket()
函数调用创建了一个数据报套接字(UDP)。
面向连接的 socket(SOCK_STREAM)
- 传输过程中数据不会丢失
- 按序传输数据
- 传输的数据不存在数据边界
- 基于字节流的
- 收发数据的 socket 内部有 buffer(字节数组),可能 write 三次,read 一次读完;当 buffer 已满时数据也不会丢失,会停止 write
面向消息的 socket (SOCK_DGREAM)
- 强调快速传输而非传输顺序
- 传输的数据可能丢失也可能损毁
- 传输的数据有数据边界
- 限制每次传输的数据大小
套接字使用的具体协议
fd1 = socket(PF_INET, SOCK_STREAM, 0);
中第三个参数表示使用的具体协议,0 为默认协议。因为 规定了 IPv4 协议族中的面向连接的 socket 只有 IPPROTO_TCP,因此用 0 可代替;如果前两个参数不能确定具体协议则不能填 0