当前位置: 首页 > news >正文

Webserver(4.9)本地套接字的通信

目录

  • 本地套接字

本地套接字

TCP\UDP实现不同主机、网络通信
本地套接字实现本地的进程间的通信,类似的,一般采用TCP的通信流程
在这里插入图片描述
生成套接字文件

在这里插入图片描述

#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/un.h>int main(){unlink("client.sock");//1.创建套接字int cfd=socket(AF_LOCAL,SOCK_STREAM,0);if(cfd==-1){perror("socket");exit(-1);}//2.绑定本地套接字文件struct sockaddr_un addr;addr.sun_family=AF_LOCAL;strcpy(addr.sun_path,"client.sock");int ret=bind(cfd,(struct sockaddr *)&addr,sizeof(addr));if(ret==-1){perror("bind");exit(-1);}//3.连接服务器struct sockaddr_un seraddr;seraddr.sun_family=AF_LOCAL;strcpy(seraddr.sun_path,"server.sock");ret=connect(cfd,(struct sockaddr *)&seraddr,sizeof(addr));if(ret==-1){perror("connect");exit(-1);}//4.通信int num=0;while(1){char buf[128];sprintf(buf,"hello,i am client:%d\n",num++);send(cfd,buf,strlen(buf)+1,0);printf("clientsay:%s\n",buf);//接收数据int len=recv(cfd,buf,sizeof(buf),0);if(len==-1){perror("recv");exit(-1);}else if(len==0){printf("server closed...\n");break;}else if(len>0){printf("server say:%s\n",buf);}sleep(1);}close(cfd);return 0;
}
#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/un.h>int main(){unlink("server.sock");//1.创建套接字int lfd=socket(AF_LOCAL,SOCK_STREAM,0);if(lfd==-1){perror("socket");exit(-1);}//2.绑定本地套接字文件struct sockaddr_un addr;addr.sun_family=AF_LOCAL;strcpy(addr.sun_path,"server.sock");int ret=bind(lfd,(struct sockaddr *)&addr,sizeof(addr));if(ret==-1){perror("bind");exit(-1);}//3.监听ret=listen(lfd,100);if(ret==-1){perror("listen");exit(-1);}//4.等待客户端连接struct sockaddr_un cliaddr;int len=sizeof(cliaddr);int cfd=accept(lfd,(struct sockaddr *)&cliaddr,&len);if(cfd==-1){perror("accepr");exit(-1);}printf("client socket filename:%s\n",cliaddr.sun_path);//5.通信while(1){char buf[128];int len=recv(cfd,buf,sizeof(buf),0);if(len==-1){perror("recv");exit(-1);}else if(len==0){printf("client closed...\n");break;}else if(len>0){printf("client say:%s\n",buf);send(cfd,buf,len,0);}}close(cfd);close(lfd);return 0;
}

http://www.mrgr.cn/news/68014.html

相关文章:

  • 如何在 Java 中使用 Canal 同步 MySQL 数据到 Redis
  • 浏览器存储策略解析(三)Local/sessionStorage实战:如何查看本地浏览器上数据
  • Pandas 数据分析工具详细教程
  • Hadoop生态圈框架部署(五)- Zookeeper完全分布式部署
  • class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys
  • Python 爬取大量数据如何并发抓取与性能优化
  • adb shell常用命令
  • [复健计划][紫书]Chapter 7 暴力求解法
  • 今日 AI 简报|微软推出通用多智能体系统,支持语音克隆的开源TTS模型,Android 自动化评估等
  • 关于 RK3588多屏显示的时候第二屏幕出现无法矫正的x坐标偏移 的解决方法
  • 哈夫曼编码的实现
  • Android CCodec Codec2 (二十)C2Buffer与Codec2Buffer
  • Linux网络命令:用于查看和修改路由表的重要工具ip route 详解
  • esp32记录一次错误
  • 基于SpringBoot的社区讯息服务小程序【附源码】
  • jdk1.7和jdk1.8有什么区别?
  • 基于Multisim8路抢答器电路仿真电路(含仿真和报告)
  • 关于 Qt+Osg中使用背景图HUD受到后绘制几何图形顶点颜色影响 的解决方法
  • Java8新特性/java
  • 为什么主机状态为 closed_busy LSF还会派发任务去运行?
  • 【NLP】使用 SpaCy、ollama 创建用于命名实体识别的合成数据集
  • 从零构建一个基于PHP和MySQL的文件管理系统
  • App推广社交玩法全解析
  • 数据结构---排序总结
  • 基于Multisim六路抢答器电路(含仿真和报告)
  • 数据链路层Mac协议与ARP协议