zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

TCPIP网络编程 -- (二)套接字类型与协议设置

2023-04-22 11:01:53 时间

TCP/IP详解 -- (二)套接字类型与协议设置

2.1套接字协议机器数据传输特性

fd1 = socket(PF_INET, SOCK_STREAM, 0);
fd3 = socket(PF_INET, SOCK_DGRAM, 0);

socket() 函数用于创建一个套接字。它有三个参数:domaintypeprotocol

  • domain 指定了套接字使用的协议族。例如,PF_INET 表示使用 IPv4 协议族。
  • type 指定了套接字的类型。例如,SOCK_STREAM 表示流式套接字,而 SOCK_DGRAM 表示数据报套接字。
  • protocol 指定了套接字使用的具体协议。通常设置为0,表示使用默认协议。

这个函数返回一个文件描述符,用于表示新创建的套接字。如果创建失败,则返回 -1。

例如,在这段代码中,第一个 socket() 函数调用创建了一个流式套接字(TCP),第二个 socket() 函数调用创建了一个数据报套接字(UDP)。

面向连接的 socket(SOCK_STREAM)

  1. 传输过程中数据不会丢失
  2. 按序传输数据
  3. 传输的数据不存在数据边界
  4. 基于字节流的
  5. 收发数据的 socket 内部有 buffer(字节数组),可能 write 三次,read 一次读完;当 buffer 已满时数据也不会丢失,会停止 write

面向消息的 socket (SOCK_DGREAM)

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

套接字使用的具体协议

fd1 = socket(PF_INET, SOCK_STREAM, 0);

中第三个参数表示使用的具体协议,0 为默认协议。因为 规定了 IPv4 协议族中的面向连接的 socket 只有 IPPROTO_TCP,因此用 0 可代替;如果前两个参数不能确定具体协议则不能填 0