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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!