如何使用C语言实现本地socke通讯
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要介绍了如何使用C语言实现本地socke通讯,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、概述使用本地socket通讯可
千家信息网最后更新 2025年11月15日如何使用C语言实现本地socke通讯
这篇文章主要介绍了如何使用C语言实现本地socke通讯,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
一、概述
使用本地socket通讯可以实现进程之间的通讯。
相关函数描述如下:
int socket(int domain, int type, int protocol);函数说明: 创建本地域socket函数参数: domain: AF_UNIX or AF_LOCAL type: SOCK_STREAM或者SOCK_DGRAM protocol: 0 表示使用默认协议函数返回值: 成功: 返回文件描述符. 失败: 返回-1, 并设置errno值.创建socket成功以后, 会在内核创建缓冲区, 下图是客户端和服务端内核缓冲区示意图.int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);函数说明: 绑定套接字函数参数: socket: 由socket函数返回的文件描述符 addr: 本地地址 addlen: 本地地址长度函数返回值: 成功: 返回文件描述符. 失败: 返回-1, 并设置errno值.需要注意的是: bind函数会自动创建socket文件, 若在调用bind函数之前socket文件已经存在, 则调用bind会报错, 可以使用unlink函数在bind之前先删除文件.struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX or AF_LOCAL*/ char sun_path[108]; /* pathname */};整体使用步骤和网络通讯的socket是差不多的,如下所示:
tcp的本地套接字服务器流程: 创建套接字 socket(AF_UNIX,SOCK_STREAM,0) 绑定 struct sockaddr_un &强转 侦听 listen 获得新连接 accept 循环通信 read-write 关闭文件描述符 closetcp本地套接字客户端流程: 调用socket创建套接字 调用bind函数将socket文件描述和socket文件进行绑定. 不是必须的, 若无显示绑定会进行隐式绑定,但服务器不知道谁连接了. 调用connect函数连接服务端 循环通信read-write 关闭文件描述符 close
二、代码示例
1.服务端代码示例
//本地socket通讯服务端#include#include #include #include #include #include #include #include int main(){ //创建socket int lfd = socket(AF_UNIX,SOCK_STREAM,0); if(lfd<0){ perror("socket error"); return -1; } //删除socket文件,避免bind失败 unlink("./server.sock"); //绑定 struct sockaddr_un serv; bzero(&serv,sizeof(serv)); serv.sun_family = AF_UNIX; strcpy(serv.sun_path,"./server.sock"); int ret = bind(lfd,(struct sockaddr *)&serv,sizeof(serv)); if(ret<0){ perror("bind error"); return -1; } //监听 listen(lfd,10); //接收新的链接-accept struct sockaddr_un client; bzero(&client,sizeof(client)); socklen_t len = sizeof(client); int cfd = accept(lfd,(struct sockaddr*)&client,&len); if(cfd<0){ perror("accept error"); return -1; } printf("cient->[%s]\n",client.sun_path); int n; char buf[1024]; while(1){ //读取数据 memset(buf,0x00,sizeof(buf)); n = read(cfd,buf,sizeof(buf)); if(n<=0){ printf("read error or client close ,n=[%d]\n",n); break; } printf("n=[%d],buf=[%s]\n",n,buf); //发送数据 write(cfd,buf,n); } //关闭套接字 close(lfd); return 0;}
2.客户端代码示例
//本地socket通信客户端#include#include #include #include #include #include #include #include int main(){ //创建socket int cfd = socket(AF_UNIX,SOCK_STREAM,0); if(cfd<0){ perror("socket error"); return -1; } //删除socket文件,避免bind失败 unlink("./client.sock"); //绑定 struct sockaddr_un client; bzero(&client,sizeof(client)); client.sun_family= AF_UNIX; strcpy(client.sun_path,"./client.sock"); int ret = bind(cfd,(struct sockaddr*)&client,sizeof(client)); if(ret<0){ perror("bind error"); return -1; } struct sockaddr_un serv; bzero(&serv,sizeof(serv)); serv.sun_family = AF_UNIX; strcpy(serv.sun_path,"./server.sock"); ret = connect(cfd,(struct sockaddr*)&serv,sizeof(serv)); if(ret<0){ perror("connect error"); return -1; } int n; char buf[1024]; while(1){ memset(buf,0x00,sizeof(buf)); n = read(STDIN_FILENO,buf,sizeof(buf)); //发送数据 write(cfd,buf,n); //读取数据 memset(buf,0x00,sizeof(buf)); n = read(cfd,buf,sizeof(buf)); if(n<=0){ printf("read error or client close ,n=[%d]",n); break; } printf("n=[%d],buf=[%s]",n,buf); } close(cfd); return 0;}
感谢你能够认真阅读完这篇文章,希望小编分享的"如何使用C语言实现本地socke通讯"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
函数
文件
通讯
套接字
服务
客户
客户端
数据
篇文章
成功
代码
示例
通信
语言
内核
参数
地址
服务器
流程
缓冲区
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
赣州网络安全知识竞赛的答案
虹口区市场软件开发优势
辐射服务器管理员
新乡互联网大厦牛为科技
游戏服务器人数
南关区通用网络技术诚信经营
如何判断服务器网络质量问题
可乐数据库营销案例
网络安全法中的数据处理包括
计算机软件开发的经营范围
公文管理数据库设计的意义
河南光猫数据库
专业服务器网络设置
淘宝网用什么服务器
数据库开源概念
对需求不确定的软件开发
网游服务器对数据库性能要求
sd数据库的英文
留言版代码软件开发
网络技术侦查能力
北京小程序软件开发价格
国外体育赛事数据库
服务器如何改成电脑用
华三服务器不能通过远程连接
支付宝劳动仲裁服务器异常
数据库开源概念
奶块都有哪几个服务器
漫威超级战争小米服务器
查看数据库表锁定
互联网科技跨国集团公司