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

Linux网络编程---本地套接字

1.概述

本地套接字
    1:作用:本地的进程间通信
    2.有关系的进程间通信
    3.没有关系的进程间的通信
本地套结字实现流程和网络套结字实现相似,一般采用tcp
 

 二.通信流程

本地套结字通信的流程:1.服务器端:1.1 int fd = socket(AF_UNIX/AF_LOCAL,SOCKET_STREAM,0)1.2 监听的套结字需要绑定本地的套结字文件struct sockaddr_un addr;绑定成功后指定的sun_path中的套结字文件会自动生成bind(fd,addr,len);1.3 监听listen(fd,100);1.4等待并接收连接请求struct sockaddr_un cliaddr;int cfd = accept(fd,&cliaddr,&len)1.5通信recv send1.6关闭客户端1. int fd = socket(AF_LOCAL,SOCKET_STREAM,0)2. 绑定成功后指定的sun_path中的套结字文件会自动生成struct sockaddr_un addr;bind(fd,addr,len)3.连接struct sockaddr_un serveraddr;connect(fd,&serveraddr,len);4.通信5.关闭

三.实例代码实现

3.1 server

#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>#include <sys/un.h>int main()
{unlink("server.sock");//解决报错:bind: Address already in useint sockfd =  socket(AF_LOCAL,SOCK_STREAM,0);if(sockfd == -1){perror("socket");exit(-1);}struct sockaddr_un server;server.sun_family = AF_LOCAL;strcpy(server.sun_path,"server.sock");if(bind(sockfd,(const struct sockaddr*)&server,sizeof(server)) == -1){perror("bind");exit(-1);}if(listen(sockfd, 100) == -1){perror("listen");exit(-1);}struct sockaddr_un client;int len = sizeof(client);int client_fd = accept(sockfd,(struct sockaddr*)&client,&len);if(client_fd == -1){perror("accept");exit(-1);}char recvbuff[1024] = {0};char *server_data = "i am server";while(1){memset(recvbuff,0,sizeof(recvbuff));len = recv(client_fd,recvbuff,sizeof(recvbuff),0);if(len == -1){perror("recv");break;}else if(len == 0){printf("客户端断开连接\n");}else if(len > 0){printf("recv client data : %s\n",recvbuff);}send(client_fd,server_data,strlen(server_data),0);}close(sockfd);close(client_fd);return 0;
}

3.2 client

#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/un.h>int main()
{unlink("client.sock"); //解决报错:bind: Address already in useint sockfd =  socket(AF_LOCAL,SOCK_STREAM,0);if(sockfd == -1){perror("socket");exit(-1);}struct sockaddr_un server;server.sun_family = AF_LOCAL;strcpy(server.sun_path,"client.sock");if(bind(sockfd,(const struct sockaddr*)&server,sizeof(server)) == -1){perror("bind");exit(-1);}struct sockaddr_un client;client.sun_family = AF_LOCAL;memcpy(client.sun_path,"server.sock",sizeof("server.sock"));int len = sizeof(client);int ret = connect(sockfd,(const struct sockaddr*)&client,len);if(ret == -1){perror("connect");exit(-1);}int num = 0;char buff[1024];while(1){memset(buff,0,sizeof(buff));printf("client say: %s\n",buff);sprintf(buff,"hello i am clinet------%d\n",num++);len = send(sockfd,buff,strlen(buff)+1,0);if(len == -1){perror("send");break;}sleep(1);memset(buff,0,sizeof(buff));len = recv(sockfd,buff,sizeof(buff),0);if(len == -1){perror("recv");exit(-1);}else if(len == 0){printf("服务端断开连接\n");}else if(len > 0){printf("recv server data : %s\n",buff);}}close(sockfd);return 0;
}

相关文章:

Linux网络编程---本地套接字

1.概述 本地套接字 1&#xff1a;作用:本地的进程间通信 2.有关系的进程间通信 3.没有关系的进程间的通信 本地套结字实现流程和网络套结字实现相似&#xff0c;一般采用tcp 二.通信流程 本地套结字通信的流程:1.服务器端:1.1 int fd socket(AF_UNIX/AF_LOCAL,…...

数据结构之四:堆和二叉树

堆的实现:SData/Heap/heap.c Hera_Yc/bit_C_学习 - 码云 - 开源中国 树 树的概念 树&#xff1a;是一个非线性数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就…...

【论文阅读】国际开源发展经验及其对我国开源创新体系建设的启示

作者&#xff1a;包云岗老师 包云岗老师是计算机体系结构方向的大牛&#xff0c;推动了体系结构方面的开源事业! 欢迎对本栏目感兴趣的人学习"一生一芯"~ 学习体会&#xff1a; 承接前文&#xff0c;唐志敏老师讲到已有的软硬件生态系统和开发成本制约了对新结构的探…...

redis击穿,穿透,雪崩以及解决方案

目录 击穿 解决方案一 解决方案二 穿透 解决方案 雪崩 解决方案 击穿 指的是单个key在缓存中查不到&#xff0c;去数据库查询&#xff0c;这样如果并发不大或者数据库数据量不大的话是没有什么问题的。 如果数据库数据量大并且是高并发的情况下那么就可能会造成数据库压…...

时频转换 | Matlab格拉姆角和场Gramian angular summation field一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式 基本介绍 时频转换 | Matlab格拉姆角和场Gramian angular summation field一维数据转二维图像方法 程序设计 clear clc % close all load x.mat % 导入数据 x x(1:5120); % 本数据只选择5120个点进行分析 fs 6400 ; % 数据采样频…...

qt QCryptographicHash详解

1、概述 QCryptographicHash是Qt框架中提供的一个类&#xff0c;用于实现加密散列函数&#xff0c;即哈希函数。哈希函数能够将任意长度的数据转换为固定长度的哈希值&#xff0c;也称为散列值或数据指纹。这个哈希值通常用于数据的完整性校验、密码存储等场景。QCryptographi…...

亚马逊云科技大语言模型加速OCR应用场景发展

目录 前言Amazon Bedrock关于OCR解决方案Amazon Bedrock进行OCR关键信息提取方案注册亚马逊账号API调用环境搭建 总结 前言 大语言模型是一种基于神经网络的自然语言处理技术&#xff0c;它能够学习和预测自然语言文本中的规律和模式&#xff0c;可以理解和生成自然语言的人工…...

什么是分库?分表?分库分表?

分库分表&#xff0c;是企业里面比较常见的针对高并发、数据量大的场景下的一种技术优化方案&#xff0c;所谓“分库分表”&#xff0c;根本不是一回事&#xff0c;而是三件事&#xff0c;他们要解决的问题也都不一样。 这三个事分别是“只分库不分表”、“只分表不分库”、以…...

QT 中 sqlite 数据库使用

一、前提 --pro文件添加sql模块QT core gui sql二、使用 说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()<<list;连接 sqlite3 数据库 …...

不一样的CSS(4)--icon图标系列之svg

序言 上一节内容我们讲解了如何利用css去画一个五角星&#xff0c;其中包括了使用svg的方法&#xff0c;有些小伙伴们对svg的使用不是很了解&#xff0c;那么本节内容我们主要来讲一下&#xff0c;关于svg标签的的使用。 目录 序言一、svg的介绍二、安装SVG扩展插件三、SVG基…...

Level DB --- Cache

class Cache是Level DB中的重要的数据结构&#xff0c;它是一个LRU&#xff08;Least Recently Used&#xff09; Cache的实现。这里面的判断条件主要是内存大小&#xff08;而不是存储entry的个数&#xff09;。当内存达到上界&#xff0c;会释放不被使用的entry&#xff08;存…...

学在西电录播课使用python下载,通过解析m3u8协议、多线程下载ts视频块以及ffmpeg合并

本文涵盖的内容仅供个人学习使用&#xff0c;如果侵犯学校权利&#xff0c;麻烦联系我删除。 初衷 研究生必修选逃&#xff0c; 期末复习怕漏过重点题目&#xff0c;但是看学在西电的录播回放课一卡一卡的&#xff0c;于是想在空余时间一个个下载下来&#xff0c;然后到时候就…...

Springboot3介绍

一、Springboot3简介: https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html?spmwolai.workspace.0.0.68b62306Q6jtTw#getting-started.introducing-spring-boot 无论使用XML、注解、Java配置类还是他们的混合用法&#xff0c;配置文件过于…...

Oracle 11G DataGuard GAP 修复过程(通过主库scn增备恢复)

Oracle 11G DataGuard GAP 修复 &#xff08;通过主库scn增备恢复&#xff09; 介绍 DG GAP 顾名思义就是&#xff1a;DG不同步&#xff0c;当备库不能接受到一个或多个主库的归档日志文件时候&#xff0c;就发生了 GAP。 那么&#xff0c;如果遇到GAP如何修复呢&#xff1f…...

WLAN AutoConfig服务假死?重启服务恢复网络连接!

目录 背景&#xff1a; 过程&#xff1a; 可能引起原因&#xff1a; 具体解决步骤&#xff1a; 方法一&#xff1a; 方法二&#xff1a; 总结&#xff1a; 背景&#xff1a; 这个问题困扰我好长一段时间了&#xff0c;每次下班将电脑关机后&#xff0c;次日早上电脑开机…...

【linux】(30)shell-条件判断

if 语句 if 语句是 Shell 脚本中用于条件判断的基本结构。 基本语法 if 语句的基本语法如下&#xff1a; if [ condition ] thencommands ficondition 是要测试的条件。commands 是在条件为真时要执行的命令。 示例 简单条件判断 #!/bin/bashif [ 1 -eq 1 ] thenecho &q…...

docker安装启动问题解决排查

一、安装docker报错 刚开始安装docker报这个错&#xff1a; Error: Transaction test error: file /usr/libexec/docker/cli-plugins/docker-buildx from install of docker-ce-cli-1:20.10.8-3.el8.x86_64 conflicts with file from package docker-buildx-plugin-0:0.14.0…...

《MySQL 查询进阶:复杂查询语句的魅力》

一、引言 MySQL 的复杂查询语句就像是一把神奇的钥匙&#xff0c;能够打开数据世界的大门&#xff0c;展现出数据的无限魅力。本文将带你深入探索 MySQL 查询进阶技巧&#xff0c;从常用查询到子查询&#xff0c;再到视图的运用&#xff0c;让你领略复杂查询语句的强大功能。 …...

OpenHarmony-3.HDF框架(2)

OpenHarmony HDF 平台驱动 1.平台驱动概述 系统平台驱动框架是系统驱动框架的重要组成部分&#xff0c;它基于HDF驱动框架、操作系统适配层(OSAL, operating system abstraction layer)以及驱动配置管理机制&#xff0c;为各类平台设备驱动的实现提供标准模型。 系统平台驱动(…...

人大金仓(KingBaseEs)数据库操作手册

人大金仓数据库&#xff08;KingbaseES&#xff09;是由北京人大金仓信息技术股份有限公司&#xff08;简称人大金仓&#xff09;自主研发的、具有自主知识产权的通用关系型数据库管理系统。 官方下载地址&#xff1a;KingbaseES 人大金仓数据库 KES技术文档在线手册&#xf…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...