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

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 1111 01:18 udpclientsrwxrwxr-x 1 linux linux     0 1111 01:18 udpserver

相关文章:

C/S架构学习之基于UDP的本地通信(客户机)

基于UDP的本地通信&#xff08;客户机&#xff09;&#xff1a;创建流程&#xff1a;一、创建数据报式套接字&#xff08;socket函数&#xff09;&#xff1a; int sock_fd socket(AF_UNIX,SOCK_DGRAM,0);if(-1 sock_fd){perror("socket error");exit(-1);}二、创建…...

【性能测试】服务端中间件docker常用命令解析整理(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、搜索 docker …...

【探索Linux】—— 强大的命令行工具 P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)

阅读导航 引言一、进程间通信概念二、进程间通信目的三、进程间通信分类四、管道1. 什么是管道2. 匿名管道&#xff08;1&#xff09;创建和关闭⭕pipe() 函数⭕创建匿名管道⭕关闭匿名管道 &#xff08;2&#xff09;通信方式&#xff08;3&#xff09;用法示例&#xff08;4&…...

图论12-无向带权图及实现

文章目录 带权图1.1带权图的实现1.2 完整代码 带权图 1.1带权图的实现 在无向无权图的基础上&#xff0c;增加边的权。 使用TreeMap存储边的权重。 遍历输入文件&#xff0c;创建TreeMap adj存储每个节点。每个输入的adj节点链接新的TreeMap&#xff0c;存储相邻的边和权重 …...

每日一题(LeetCode)----数组--有序数组的平方

每日一题(LeetCode)----数组–有序数组的平方 1.题目&#xff08;[977. 有序数组的平方](https://leetcode.cn/problems/sqrtx/)&#xff09; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。…...

SpringCloud微服务:Eureka

目录 提供者与消费者 服务调用关系 eureka的作用 在Eureka架构中&#xff0c;微服务角色有两类 Eureka服务 提供者与消费者 服务提供者:一次业务中&#xff0c;被其它微服务调用的服务。(提供接口给其它微服务)服务消费者:一次业务中&#xff0c;调用其它微服务的服务。(调…...

19.删除链表的倒数第N个结点(LeetCode)

想法一 先用tail指针找尾&#xff0c;计算出节点个数&#xff0c;再根据倒数第N个指定删除 想法二 根据进阶的要求&#xff0c;只能遍历一遍链表&#xff0c;那刚刚想法一就做不到 首先&#xff0c;我们要在一遍内找到倒数第N个节点&#xff0c;所以我们设置slow和fast两个指…...

PyTorch技术和深度学习——三、深度学习快速入门

文章目录 1.线性回归1&#xff09;介绍2&#xff09;加载自由泳冠军数据集3&#xff09;从0开始实现线性回归模型4&#xff09;使用自动求导训练线性回归模型5&#xff09;使用优化器训练线性回归模型 2.使用torch.nn模块构建线性回归模型1&#xff09;使用torch.nn.Linear训练…...

360导航恶意修改浏览器启动页!我的chrome和IE均中招,如何解决?

0&#xff0c;关闭360等“安全”软件 1&#xff0c;按下组合键winR 2&#xff0c;输入regedit&#xff0c;回车 3&#xff0c;按下组合键ctrlF 4&#xff0c;输入http://hao.360.cn&#xff0c;查找下一个 5&#xff0c;查到一个注册表键值就删一个&#xff0c;一个不放过…...

RabbitMQ的高级特性

目录 数据导入 MQ的常见问题 消息可靠性问题 生产者确认机制 SpringAMQP实现生产者确认 消息持久化 消费者消息确认 失败重试机制 消费者失败消息处理策略 死信交换机 TTL 延时队列 安装插件 SpringAMQP使用插件 消息堆积问题 惰性队列 MQ的高可用 普通集群 …...

Java自学第10课:JavaBean和servlet基础

目录 目录 1 JavaBean &#xff08;1&#xff09;概念 &#xff08;2&#xff09;分类 &#xff08;3&#xff09;使用 2 servlet &#xff08;1&#xff09;代码结构 &#xff08;2&#xff09;常用接口 &#xff08;3&#xff09;如何开发 1 新建servlet 2 配置 1…...

AR打卡小程序:构建智能办公的新可能

【内容摘要】 随着技术的飞速发展&#xff0c;智能办公已不再是遥不可及的梦想。在这其中&#xff0c;AR打卡小程序以其独特的技术优势&#xff0c;正逐步成为新型办公生态的重要组成部分。本文将探讨AR打卡小程序的设计理念、技术实现以及未来的应用前景&#xff0c;并尝试深…...

Python环境安装、Pycharm开发工具安装(IDE)

Python下载 Python官网 Python安装 Python安装成功 Pycharm集成开发工具下载&#xff08;IDE&#xff09; PC集成开发工具 Pycharm集成开发工具安装&#xff08;IDE&#xff09; 安装完成 添加环境变量&#xff08;前面勾选了Path不用配置&#xff09; &#xff08;1&…...

报时机器人的rasa shell执行流程分析

本文以报时机器人为载体&#xff0c;介绍了报时机器人的对话能力范围、配置文件功能和训练和运行命令&#xff0c;重点介绍了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网关提供路由管理、服务发现、鉴权限流等功能

随着微服务的兴起&#xff0c;API网关越来越常见。API网关是连接应用程序和用户之间的桥梁&#xff0c;就像一个交通指挥员&#xff0c;负责处理所有进出应用的数据和请求&#xff0c;确保安全、高效、有序地流通。 今天给大家推荐一个.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网络赛道初赛&#xff08;部分&#xff09;试题 10.在网络运维中&#xff0c;Telnet是用于连接远程设备的协议之一&#xff0c;那么以下哪一个设备不支持通过Telnet协议远程连接&#xff1f; PCACAPAR 12.openFlow交换机基于流表转发报文&#xff0c;每个流表项由…...

rabbitMq虚拟主机概念

虚拟主机是RabbitMQ中的一种逻辑隔离机制&#xff0c;用于将消息队列、交换机以及其他相关资源进行隔离。 在RabbitMQ中&#xff0c;交换机&#xff08;Exchange&#xff09;用于接收生产者发送的消息&#xff0c;并根据特定的路由规则将消息分发到相应的队列中。而虚拟主机则…...

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…...

C++ vs .NET 数组原地反转实测:小数组 C++ 碾压,大数组 .NET 反杀?级

前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知&#xff0c;本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台&#xff0c;有非常多的配置参数。详细的参数列表可以…...

3招轻松搞定微信防撤回失效难题,让你的消息不再“消失“

3招轻松搞定微信防撤回失效难题&#xff0c;让你的消息不再"消失" 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://…...

PCB板材核心技术解析:从材料特性到高速信号设计

1. PCB板材基础&#xff1a;从树脂到铜箔的进化史 第一次拆开手机后盖时&#xff0c;你可能注意过那块绿色的电路板——它就是PCB&#xff08;Printed Circuit Board&#xff09;。但你可能不知道&#xff0c;这块看似简单的板子&#xff0c;其实藏着材料科学的精妙设计。让我用…...

让 AI 代理拥有“专业技能包“:Microsoft Agent Skills中

一、核心问题及解决方案&#xff08;按踩坑频率排序&#xff09; 问题 1&#xff1a;误删他人持有锁——最基础也最易犯的漏洞 成因&#xff1a;释放锁时未做身份校验&#xff0c;直接执行 DEL 命令删除键。典型场景&#xff1a;服务 A 持有锁后&#xff0c;业务逻辑耗时超过锁…...

从零规划一个高校新校区网络:除了技术选型,这些坑你绕过去了吗?

高校新校区网络规划实战指南&#xff1a;从技术选型到避坑全解析 当清晨的第一缕阳光洒在新校区的建筑群上&#xff0c;网络架构师手中的拓扑图正决定着未来数万师生能否流畅开展在线教学、科研协作和校园生活。不同于传统企业网络&#xff0c;高校环境具有用户密度高、业务类型…...

免费APK直装神器:告别模拟器,3分钟在Windows上畅玩安卓应用

免费APK直装神器&#xff1a;告别模拟器&#xff0c;3分钟在Windows上畅玩安卓应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为安卓模拟器卡顿、臃肿而烦恼吗…...

IPTVnator:一站式开源跨平台IPTV播放器解决方案

IPTVnator&#xff1a;一站式开源跨平台IPTV播放器解决方案 【免费下载链接】iptvnator :tv: Cross-platform IPTV player application with multiple features, such as support of m3u and m3u8 playlists, favorites, TV guide, TV archive/catchup and more. 项目地址: h…...

Google搜索高级语法全解析:从基础到进阶的完整指南

Google搜索高级语法全解析&#xff1a;从基础到进阶的完整指南 在信息爆炸的时代&#xff0c;如何快速准确地找到所需内容已成为一项关键技能。Google作为全球最受欢迎的搜索引擎&#xff0c;其强大的搜索功能远不止简单的关键词匹配。掌握Google高级搜索语法&#xff0c;就像…...

微信QQ防撤回补丁终极指南:一键解决消息被撤回的烦恼

微信QQ防撤回补丁终极指南&#xff1a;一键解决消息被撤回的烦恼 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com…...

Pixel Aurora Engine效果展示:从Prompt到像素画的10组高质量生成对比

Pixel Aurora Engine效果展示&#xff1a;从Prompt到像素画的10组高质量生成对比 1. 像素艺术的新纪元 在数字艺术创作领域&#xff0c;Pixel Aurora Engine带来了一场像素艺术的革命。这款基于AI扩散模型的工作站&#xff0c;将复古的8-bit美学与现代AI技术完美融合&#xf…...