news 2026/5/25 7:25:41

UNIX域套接字

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UNIX域套接字

UNIX 域套接字类型

  • UNIX 域流式套接字
    • 类似于 TCP,提供面向连接、可靠的双向通信
    • 使用本地文件路径作为地址,适用于本地进程间通信
  • UNIX 域数据报套接字
    • 类似于 UDP,提供无连接、不可靠的通信
    • 同样使用本地文件路径作为地址

本地地址结构

structsockaddr_un{unsignedshortsun_family;// 协议类型,如 AF_UNIXcharsun_path[108];// 套接字文件路径};

UNIX 域流式套接字

  • 用法和 TCP 套接字基本一致,区别在于使用的协议和地址不同

服务端流程

  • 创建 UNIX 域流式套接字
  • 绑定本地地址(套接字文件)
  • 设置监听模式
  • 接收客户端的连接请求
  • 发送/接收数据

示例代码

#include<sys/socket.h>#include<sys/un.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#defineMY_SOCK_PATH"/tmp/my_sock_file"#defineLISTEN_BACKLOG50#definehandle_error(msg)\do{perror(msg);exit(EXIT_FAILURE);}while(0)intmain(intargc,char*argv[]){intsfd,cfd;structsockaddr_unmy_addr,peer_addr;socklen_tpeer_addr_size;charbuf[BUFSIZ]={};sfd=socket(AF_UNIX,SOCK_STREAM,0);if(sfd==-1)handle_error("socket");memset(&my_addr,0,sizeof(structsockaddr_un));my_addr.sun_family=AF_UNIX;strncpy(my_addr.sun_path,MY_SOCK_PATH,sizeof(my_addr.sun_path)-1);if(bind(sfd,(structsockaddr*)&my_addr,sizeof(structsockaddr_un))==-1)handle_error("bind");if(listen(sfd,LISTEN_BACKLOG)==-1)handle_error("listen");peer_addr_size=sizeof(structsockaddr_un);cfd=accept(sfd,(structsockaddr*)&peer_addr,&peer_addr_size);if(cfd==-1)handle_error("accept");recv(cfd,buf,BUFSIZ,0);printf("%s\n",buf);close(cfd);close(sfd);remove(MY_SOCK_PATH);return0;}

客户端流程

  • 创建 UNIX 域流式套接字
  • 指定服务器端地址(套接字文件)
  • 建立连接
  • 发送/接收数据

示例代码

#include<sys/socket.h>#include<sys/un.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#defineMY_SOCK_PATH"/tmp/my_sock_file"#definehandle_error(msg)\do{perror(msg);exit(EXIT_FAILURE);}while(0)intmain(intargc,char*argv[]){intfd;structsockaddr_unpeer_addr;charbuf[BUFSIZ]={"Hello World!"};fd=socket(AF_UNIX,SOCK_STREAM,0);if(fd==-1)handle_error("socket");memset(&peer_addr,0,sizeof(structsockaddr_un));peer_addr.sun_family=AF_UNIX;strncpy(peer_addr.sun_path,MY_SOCK_PATH,sizeof(peer_addr.sun_path)-1);if(connect(fd,(structsockaddr*)&peer_addr,sizeof(structsockaddr_un))==-1)handle_error("connect");printf("%s\n",buf);send(fd,buf,strlen(buf),0);close(fd);return0;}

UNIX 域数据报套接字

  • 流程类似于 UDP 套接字,无需建立连接
  • UNIX 域流式套接字服务器端流程如下:
    • 创建 UNIX 域流式套接字
    • 绑定本地地址(套接字文件)
    • 发送/接收数据

示例代码

服务端

#include<sys/socket.h>#include<sys/un.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#defineMY_SOCK_PATH"/tmp/my_sock_file"#definehandle_error(msg)\do{perror(msg);exit(EXIT_FAILURE);}while(0)intmain(intargc,char*argv[]){intfd;structsockaddr_unmy_addr,peer_addr;socklen_tpeer_addr_size;charbuf[BUFSIZ]={};fd=socket(AF_UNIX,SOCK_DGRAM,0);if(fd==-1)handle_error("socket");memset(&my_addr,0,sizeof(structsockaddr_un));my_addr.sun_family=AF_UNIX;strncpy(my_addr.sun_path,MY_SOCK_PATH,sizeof(my_addr.sun_path)-1);if(bind(fd,(structsockaddr*)&my_addr,sizeof(structsockaddr_un))==-1)handle_error("bind");peer_addr_size=sizeof(structsockaddr_un);recvfrom(fd,buf,BUFSIZ,0,(structsockaddr*)&peer_addr,&peer_addr_size);printf("%s\n",buf);close(fd);remove(MY_SOCK_PATH);return0;}

客户端

#include<sys/socket.h>#include<sys/un.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#defineMY_SOCK_PATH"/tmp/my_sock_file"#definehandle_error(msg)\do{perror(msg);exit(EXIT_FAILURE);}while(0)intmain(intargc,char*argv[]){intfd;structsockaddr_unpeer_addr;socklen_tpeer_addr_size;charbuf[BUFSIZ]={"Hello World!"};fd=socket(AF_UNIX,SOCK_DGRAM,0);if(fd==-1)handle_error("socket");memset(&peer_addr,0,sizeof(structsockaddr_un));peer_addr.sun_family=AF_UNIX;strncpy(peer_addr.sun_path,MY_SOCK_PATH,sizeof(peer_addr.sun_path)-1);peer_addr_size=sizeof(structsockaddr_un);printf("%s\n",buf);sendto(fd,buf,strlen(buf),0,(structsockaddr*)&peer_addr,peer_addr_size);close(fd);remove(MY_SOCK_PATH);return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 20:04:41

序员必看!大模型高薪岗位揭秘:收藏这篇文章,年薪百万不是梦

锐仕方达发布132个高薪岗位&#xff0c;多个大模型相关职位年薪达40-220万&#xff0c;遍布北京、上海、杭州等城市。岗位包括大模型研发经理、算法工程师、技术专家等&#xff0c;覆盖互联网、人工智能、航空航天等行业。数据显示大模型领域人才需求旺盛&#xff0c;薪资明显高…

作者头像 李华
网站建设 2026/5/25 1:01:49

从历史演进到落地实践:Agent-ReAct-Skills-MCP-Tool全解析

本文从历史演进角度解析Agent-ReAct-Skills-MCP-Tool技术脉络&#xff0c;详解ReAct思维模式与Skills开放标准&#xff0c;对比Skills与MCP定位差异&#xff0c;探讨渐进式披露设计优势及工程化落地方案&#xff0c;分析企业Skills库建设策略&#xff0c;为开发者提供完整的技术…

作者头像 李华
网站建设 2026/5/21 11:36:17

2026国内外主流大模型全景对比:技术演进与场景适配深度解析

当 AI 大模型从 “可选工具” 变为 “必备生产力”&#xff0c;“是否使用 AI” 已无需纠结&#xff0c;核心命题转为 “如何精准用对 AI、快速借 AI 提效”。结合前文对 16 款主流模型的多维度对比&#xff0c;无论是企业还是个人&#xff0c;想要跟上时代节奏、实现效率跃迁&…

作者头像 李华
网站建设 2026/5/22 3:39:58

【毕业设计】基于springboot的医院设备管理及报修小程序的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/20 18:47:31

小程序毕设项目推荐-基于SpringBoot的医院设备管理及报修系统微信小程序基于springboot的医院设备管理及报修小程序的设计与实现【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华