C/S架构学习之基于UDP的本地通信(客户机)
- 基于UDP的本地通信(客户机):
- 创建流程:
- 一、创建数据报式套接字(socket函数):
int sock_fd = socket(AF_UNIX,SOCK_DGRAM,0);if(-1 == sock_fd){perror("socket error");exit(-1);}
- 二、创建客户机和服务器的本地网络信息结构体并填充客户机和服务器本地网络信息结构体 (struct sockaddr_un):
- 本地网络信息结构体:
#include <sys/un.h>struct sockaddr_un {sa_family_t sun_family; //AF_UNIXchar sun_path[108]; //pathname};
struct sockaddr_un serveraddr,clientaddr;socklen_t serveraddr_len = sizeof(serveraddr);socklen_t clientaddr_len = sizeof(clientaddr);memset(&serveraddr,0,serveraddr_len);memset(&clientaddr,0,clientaddr_len);serveraddr.sun_family = AF_UNIX;clientaddr.sun_family = AF_UNIX;strcpy(serveraddr.sun_path,"./udpserver");strcpy(clientaddr.sun_path,"./udpclient");
- 三、客户机绑定数据报式套接字(bind函数):、
if(-1 == bind(sock_fd,(struct sockaddr *)&clientaddr,clientaddr_len)){perror("bind error");exit(-1);}
- 四、客户机端发收数据(sendto函数、recvfrom函数):
memset(buf,0,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf) - 1] = '\0';int ret1 = sendto(sock_fd,buf,sizeof(buf),0,(struct sockaddr *)&serveraddr,serveraddr_len);if(-1 == ret1){perror("sendto error");exit(-1);}int ret2 = recvfrom(sock_fd,buf,sizeof(buf),0,(struct sockaddr*)&serveraddr,&serveraddr_len);if(-1 == ret2){perror("recvfrom error");exit(-1);}printf("服务器[%s]发来应答消息[%s]\n",serveraddr.sun_path,buf);
- 五、关闭套接字(close函数):
close(sock_fd);
- 示例代码:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/types.h>#include <unistd.h>#include <stdbool.h>#include <sys/un.h>#include <arpa/inet.h>#include <netinet/ip.h>int main(int argc, char const *argv[]){//创建套接字int sock_fd = socket(AF_UNIX,SOCK_DGRAM,0);if(-1 == sock_fd){perror("socket error");exit(-1);}//填充网络信息结构体struct sockaddr_un serveraddr,clientaddr;socklen_t serveraddr_len = sizeof(serveraddr);socklen_t clientaddr_len = sizeof(clientaddr);memset(&serveraddr,0,serveraddr_len);memset(&clientaddr,0,clientaddr_len);serveraddr.sun_family = AF_UNIX;clientaddr.sun_family = AF_UNIX;strcpy(serveraddr.sun_path,"./udpserver");strcpy(clientaddr.sun_path,"./udpclient");//绑定套接字if(-1 == bind(sock_fd,(struct sockaddr *)&clientaddr,clientaddr_len)){perror("bind error");exit(-1);}printf("基于UDP的本地通信客户机启动!!!\n");char buf[128] = {0};//收发数据while(true){memset(buf,0,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf) - 1] = '\0';int ret1 = sendto(sock_fd,buf,sizeof(buf),0,(struct sockaddr *)&serveraddr,serveraddr_len);if(-1 == ret1){perror("sendto error");exit(-1);}int ret2 = recvfrom(sock_fd,buf,sizeof(buf),0,(struct sockaddr*)&serveraddr,&serveraddr_len);if(-1 == ret2){perror("recvfrom error");exit(-1);}printf("服务器[%s]发来应答消息[%s]\n",serveraddr.sun_path,buf);}//关闭套接字close(sock_fd);return 0;}
- 运行结果:
基于UDP的本地通信客户机启动!!!hello服务器[./udpserver]发来应答消息[hello---------k]I Love China!!!服务器[./udpserver]发来应答消息[I Love China!!!---------k]miss U服务器[./udpserver]发来应答消息[miss U---------k]
- 特别注意:
strcpy(serveraddr.sun_path,"./udpserver");和strcpy(clientaddr.sun_path,"./udpclient");代码段中的udpserver文件、udpclient文件是套接字文件;- 如下所示:
srwxrwxr-x 1 linux linux 0 11月 11 01:18 udpclientsrwxrwxr-x 1 linux linux 0 11月 11 01:18 udpserver
相关文章:
C/S架构学习之基于UDP的本地通信(客户机)
基于UDP的本地通信(客户机):创建流程:一、创建数据报式套接字(socket函数): int sock_fd socket(AF_UNIX,SOCK_DGRAM,0);if(-1 sock_fd){perror("socket error");exit(-1);}二、创建…...
【性能测试】服务端中间件docker常用命令解析整理(详细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、搜索 docker …...
【探索Linux】—— 强大的命令行工具 P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)
阅读导航 引言一、进程间通信概念二、进程间通信目的三、进程间通信分类四、管道1. 什么是管道2. 匿名管道(1)创建和关闭⭕pipe() 函数⭕创建匿名管道⭕关闭匿名管道 (2)通信方式(3)用法示例(4&…...
图论12-无向带权图及实现
文章目录 带权图1.1带权图的实现1.2 完整代码 带权图 1.1带权图的实现 在无向无权图的基础上,增加边的权。 使用TreeMap存储边的权重。 遍历输入文件,创建TreeMap adj存储每个节点。每个输入的adj节点链接新的TreeMap,存储相邻的边和权重 …...
每日一题(LeetCode)----数组--有序数组的平方
每日一题(LeetCode)----数组–有序数组的平方 1.题目([977. 有序数组的平方](https://leetcode.cn/problems/sqrtx/)) 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。…...
SpringCloud微服务:Eureka
目录 提供者与消费者 服务调用关系 eureka的作用 在Eureka架构中,微服务角色有两类 Eureka服务 提供者与消费者 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)服务消费者:一次业务中,调用其它微服务的服务。(调…...
19.删除链表的倒数第N个结点(LeetCode)
想法一 先用tail指针找尾,计算出节点个数,再根据倒数第N个指定删除 想法二 根据进阶的要求,只能遍历一遍链表,那刚刚想法一就做不到 首先,我们要在一遍内找到倒数第N个节点,所以我们设置slow和fast两个指…...
PyTorch技术和深度学习——三、深度学习快速入门
文章目录 1.线性回归1)介绍2)加载自由泳冠军数据集3)从0开始实现线性回归模型4)使用自动求导训练线性回归模型5)使用优化器训练线性回归模型 2.使用torch.nn模块构建线性回归模型1)使用torch.nn.Linear训练…...
360导航恶意修改浏览器启动页!我的chrome和IE均中招,如何解决?
0,关闭360等“安全”软件 1,按下组合键winR 2,输入regedit,回车 3,按下组合键ctrlF 4,输入http://hao.360.cn,查找下一个 5,查到一个注册表键值就删一个,一个不放过…...
RabbitMQ的高级特性
目录 数据导入 MQ的常见问题 消息可靠性问题 生产者确认机制 SpringAMQP实现生产者确认 消息持久化 消费者消息确认 失败重试机制 消费者失败消息处理策略 死信交换机 TTL 延时队列 安装插件 SpringAMQP使用插件 消息堆积问题 惰性队列 MQ的高可用 普通集群 …...
Java自学第10课:JavaBean和servlet基础
目录 目录 1 JavaBean (1)概念 (2)分类 (3)使用 2 servlet (1)代码结构 (2)常用接口 (3)如何开发 1 新建servlet 2 配置 1…...
AR打卡小程序:构建智能办公的新可能
【内容摘要】 随着技术的飞速发展,智能办公已不再是遥不可及的梦想。在这其中,AR打卡小程序以其独特的技术优势,正逐步成为新型办公生态的重要组成部分。本文将探讨AR打卡小程序的设计理念、技术实现以及未来的应用前景,并尝试深…...
Python环境安装、Pycharm开发工具安装(IDE)
Python下载 Python官网 Python安装 Python安装成功 Pycharm集成开发工具下载(IDE) PC集成开发工具 Pycharm集成开发工具安装(IDE) 安装完成 添加环境变量(前面勾选了Path不用配置) (1&…...
报时机器人的rasa shell执行流程分析
本文以报时机器人为载体,介绍了报时机器人的对话能力范围、配置文件功能和训练和运行命令,重点介绍了rasa shell命令启动后的程序执行过程。 一.报时机器人项目结构 1.对话能力范围 (1)能够识别欢迎语意图(greet)和拜拜意图(goodbye) (2)能够识别时间意…...
C#开发的OpenRA游戏之世界存在的属性UpdatesPlayerStatistics(2)
C#开发的OpenRA游戏之世界存在的属性UpdatesPlayerStatistics(2) 在文件OpenRA\mods\cnc\rules\ defaults.yaml里,可以看到这个配置,它的作用就是让这个单元可以被观察者查看到相关的信息。 UpdatesPlayerStatistics属性同样也是有两个类组成,一个叫做信息类UpdatesPlay…...
Ocelot:.NET开源API网关提供路由管理、服务发现、鉴权限流等功能
随着微服务的兴起,API网关越来越常见。API网关是连接应用程序和用户之间的桥梁,就像一个交通指挥员,负责处理所有进出应用的数据和请求,确保安全、高效、有序地流通。 今天给大家推荐一个.NET开源API网关。 01 项目简介 Ocelot…...
wsl [Ubuntu20.04.6] 安装 Hadoop
文章目录 1.安装WSL2.安装Java安装Hadoop3.3配置文件1.修改hadoop-env.sh2.修改core-site.xml3.修改hdfs-site.xml ssh启动 1.安装WSL 重启电脑 管理员打开powershell PS C:\windows\system32> wsl --list --online PS C:\windows\system32> wsl --install -d Ubuntu-2…...
2023华为ict网络赛道初赛(部分)试题
2023华为ict网络赛道初赛(部分)试题 10.在网络运维中,Telnet是用于连接远程设备的协议之一,那么以下哪一个设备不支持通过Telnet协议远程连接? PCACAPAR 12.openFlow交换机基于流表转发报文,每个流表项由…...
rabbitMq虚拟主机概念
虚拟主机是RabbitMQ中的一种逻辑隔离机制,用于将消息队列、交换机以及其他相关资源进行隔离。 在RabbitMQ中,交换机(Exchange)用于接收生产者发送的消息,并根据特定的路由规则将消息分发到相应的队列中。而虚拟主机则…...
2-CentOS7.9下安装docker
默认情况下,CentOS7.9下有两种方法可以安装docker,分别是在线安装docker和离线安装docker(伪离线,最后还是需要网络支持) 1.环境信息 HostNameIPAddressOS VersionDocker VersionNotecentos79172.20.10.12CentOS Linux release 7.9.2009 (Core)Docker version 23.0.6, buil…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
