如何使用C语言实现本地socke通讯
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这篇文章主要介绍了如何使用C语言实现本地socke通讯,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、概述使用本地socket通讯可
千家信息网最后更新 2025年02月08日如何使用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安全错误
数据库的锁怎样保障安全
恶魔之魂重制版 哪个服务器人多
厦门武夷山软件开发
卫士通是网络安全龙头吗
pg数据库load数据
漳州软件开发工程师证
小学生网络安全新闻报道
河北数字化城管软件开发公司
数字化软件开发具体要干什么
c c 蓝牙软件开发实例
魔兽世界服务器搭建
ncbi上原生动物数据库怎么找
网络安全设备扫描工具
cayenne数据库配置大小写
rup描述软件开发过程
计算机网络技术ip怎么算
手机软件开发微信
易语言修改软件连接数据库
怎么把字节数组存到数据库
网络安全技能竞赛现状
软件开发员工培训策划
魔兽每个服务器怪物刷新时间
数据库的连接需要什么技术
软件开发免费模式
达梦数据库修改安全策略
网络安全署名文章
打造小米数据库
本机与服务器时间同步失败
加强网上网络安全阵地建设
成都软件开发价钱是多少
netty 服务器监控