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

作业5.26

定义一些常量和数据结构来存储用户信息和消息。 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define MAX_USERS 100 // 最大用户数
#define MAX_MESSAGE_LENGTH 256 // 最大消息长度
#define SERVER_PORT 8888 // 服务器端口// 用户信息结构体
typedef struct {int id;struct sockaddr_in addr;int is_online;
} User;// 消息结构体
typedef struct {User user;char message[MAX_MESSAGE_LENGTH];
} Message;// 用户数组
User users[MAX_USERS];
int user_count = 0;// 添加用户
void add_user(User user) {users[user_count++] = user;
}// 移除用户
void remove_user(int id) {int i;for (i = 0; i < user_count; i++) {if (users[i].id == id) {users[i].is_online = 0;break;}}
}// 发送消息给所有用户(除了发送者)
void send_message_to_all(Message msg, int sender_id) {int i;for (i = 0; i < user_count; i++) {if (users[i].id != sender_id && users[i].is_online) {sendto(sockfd, &msg, sizeof(msg), 0, (struct sockaddr*)&users[i].addr, sizeof(users[i].addr));}}
}

 服务器端的代码:

int main() {int sockfd;struct sockaddr_in server_addr, client_addr;socklen_t addr_len = sizeof(client_addr);Message msg;// 创建UDP socketif ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {perror("socket creation failed");exit(EXIT_FAILURE);}// 设置服务器地址和端口memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = INADDR_ANY;server_addr.sin_port = htons(SERVER_PORT);// 绑定socket到服务器地址和端口if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {perror("bind failed");exit(EXIT_FAILURE);}printf("Server is listening on port %d\n", SERVER_PORT);// 主循环接收消息while (1) {// 接收客户端消息if (recvfrom(sockfd, &msg, sizeof(msg), 0, (struct sockaddr*)&client_addr, &addr_len) == -1) {perror("recvfrom failed");continue;}// 处理消息// ...// 发送消息给所有用户(除了发送者)send_message_to_all(msg, msg.user.id);}close(sockfd);return 0;
}

 客户端的代码:

int main() {int sockfd;struct sockaddr_in server_addr;Message msg;// 创建UDP socketif ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {perror("socket creation failed");exit(EXIT_FAILURE);}// 设置服务器地址和端口memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = INADDR_ANY;server_addr.sin_port = htons(SERVER_PORT);// 用户登录,发送登录消息给服务器// ...// 创建接收消息的线程// ...// 主循环发送消息while (1) {// 读取用户输入的消息// ...// 发送消息给服务器sendto(sockfd, &msg, sizeof(msg), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));}close(sockfd);return 0;
}

相关文章:

作业5.26

定义一些常量和数据结构来存储用户信息和消息。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>#define MAX_USERS 100 // 最大用户数 #define MAX_M…...

银河麒麟服务器系统xshell连接之后主动断开,报错socket error event:32 Error:10053问题分析

银河麒麟服务器系统xshell连接之后主动断开&#xff0c;报错socket error event&#xff1a;32 Error&#xff1a;10053问题分析 一 问题描述二 系统环境三 问题分析3.1 与正常机器对比sshd文件内容以及文件权限3.2 检查同网段内是否配置多个相同的IP地址 四 后续建议 一 问题描…...

蓝桥杯算法心得——李白打酒(加强版)

大家好&#xff0c;我是晴天学长&#xff0c;记忆化搜索&#xff0c;找到技巧非常重要&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 2) .算法思路 1.memo三维表示记录的结果 3&#xff09;.算法步骤 1…...

java练习2

题目要求 创建一个Color枚举类有RED,BLUE,BLACK,YELLOW,GREEN这五个枚举值/对象Color有三个属性redValue&#xff0c;greenValue&#xff0c;blueValue创建构造方法&#xff0c;参数包括这三个属性每个枚举值都要给这三个属性赋值&#xff0c;三个属性对应的值分别是red&#…...

【安装笔记-20240523-Windows-安装测试 ShareX】

安装笔记-系列文章目录 安装笔记-20240523-Windows-安装测试 ShareX 文章目录 安装笔记-系列文章目录安装笔记-20240523-Windows-安装测试 ShareX 前言一、软件介绍名称&#xff1a;ShareX主页官方介绍 二、安装步骤测试版本&#xff1a;16.1.0下载链接功能界面 三、应用场景屏…...

2024年150道高频Java面试题(七十一)

141. spring cloud 的核心组件有哪些&#xff1f; Spring Cloud 是一个基于Spring Boot实现的微服务架构开发工具集&#xff0c;它为微服务架构中的诸多问题提供了解决方案。Spring Cloud的核心组件主要包括以下这些&#xff1a; Spring Cloud Config&#xff1a;提供服务器和…...

【深度学习】2.单层感知机

目标&#xff1a; 实现一个简单的二分类模型的训练过程&#xff0c;通过模拟数据集进行训练和优化&#xff0c;训练目标是使模型能够根据输入特征正确分类数据。 演示: 1.通过PyTorch生成了一个模拟的二分类数据集&#xff0c;包括特征矩阵data_x和对应的标签数据data_y。标签…...

JS经常碰见的报错问题

语法错误&#xff1a;由于 JavaScript 是一种动态语言&#xff0c;因此编写代码期间可能会出现语法错误。这可能包括拼写错误、漏掉分号或括号等问题。 作用域问题&#xff1a;JavaScript 中存在全局作用域和局部作用域的概念&#xff0c;有时候可能会出现变量作用域混乱导致的…...

纯前端实现截图功能

纯前端实现截图功能 一、插件二、主要代码 一、插件 一、安装html2canvas、vue-cropper npm i html2canvas --save //用于将指定区域转为图片 npm i vue-cropper -S //将图片进行裁剪二、在main.js注册vue-cropper组件 import VueCropper from vue-cropper Vue.use(VueCropper…...

【网络协议】应用层协议--HTTP

文章目录 一、HTTP是什么&#xff1f;二、HTTP协议工作过程三、HTTP协议1. fiddler2. Fiddler抓包的原理3. 代理服务器是什么?4. HTTP协议格式1.1 请求1.2 响应 四、认识HTTP的请求1.认识HTTP请求的方法2.认识请求头&#xff08;header&#xff09;3.认识URL3.1 URL是什么&…...

【图书推荐】《Vue.js 3.x+Element Plus从入门到精通(视频教学版)》

配套示例源码与PPT课件下载 百度网盘链接: https://pan.baidu.com/s/1nBQLd9UugetofFKE57BE5g?pwdqm9f 自学能力强的&#xff0c;估计不要书就能看代码学会吧。 内容简介 本书通过对Vue.js&#xff08;简称Vue&#xff09;的示例和综合案例的介绍与演练&#xff0c;使读者…...

抖店如何打造出爆品?学好这几招,轻松打爆新品流量

大家好&#xff0c;我是电商花花。 近年来&#xff0c;抖店商家越来越多&#xff0c;而选品&#xff0c;爆品就是我们商家竞争的核心了&#xff0c;谁能选出好的新品&#xff0c;打造出爆品&#xff0c;谁的会赚的多&#xff0c;销量多。 做抖音小店想出单&#xff0c;想赚钱…...

软件需求规范说明模板

每个软件开发组织都会为自己的项目选用一个或多个标准的软件需求规范说明模板。有许多软件需求规范说明模板可以使用(例如ISO/IEC/IEEE2011;Robertson and Robertson2013)。如果你的组织要处理各种类型或规模的项目&#xff0c;例如新的大型系统开发或是对现有系统进行微调&…...

vs2013使用qt Linguist以及tr不生效问题

一、qt Linguist&#xff08;语言家&#xff09;步骤流程 1、创建翻译文件,在qt选项中 2.选择对应所需的语言&#xff0c;得到.ts后缀的翻译文件 3.创建.pro文件&#xff0c;并将.ts配置在.pro文件中 3.使用qt Linguist 打开创建好的以.ts为后缀的翻译文件&#xff0c;按图所示…...

Leetcode 3163. String Compression III

Leetcode 3163. String Compression III 1. 解题思路2. 代码实现 题目链接&#xff1a;3163. String Compression III 1. 解题思路 这一题的话就是一个简单的贪婪算法&#xff0c;把相同的字符进行归并&#xff0c;然后按照题目中的表示方法进行表示一下即可。 2. 代码实现…...

Java匿名内部类的使用

演示匿名内部类的使用&#xff0c;很重要 package com.shedu.Inner;/*** 演示匿名内部类的使用*/ public class AnonymousInnerClass {//外部其他类public static void main(String[] args) {Outer04 outer04 new Outer04();outer04.method();} }class Outer04{//外部类priva…...

把自己的垃圾代码发布到官方中央仓库

参考博客&#xff1a;将组件发布到maven中央仓库-CSDN博客 感谢这位博主。但是他的步骤有漏缺&#xff0c;相对进行补充 访问管理页面 网址&#xff1a;Maven Central 新注册账号&#xff0c;或者使用github快捷登录&#xff0c;建议使用github快捷登录 添加命名空间 注意&…...

单机一天轻松300+ 最新微信小程序拼多多+京东全自动掘金项目、

现代互联网经济的发展带来了新型的盈利方式&#xff0c;这种方法通过微信小程序的拼多多和京东进行商品自动巡视&#xff0c;以此给商家带来增加的流量&#xff0c;同时为使用者带来利润。实践这一手段无需复杂操作&#xff0c;用户仅需启动相应程序&#xff0c;商品信息便会被…...

线性回归模型之套索回归

概述 本案例是基于之前的岭回归的案例的。之前案例的完整代码如下&#xff1a; import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import Ridge, LinearRegression from sklearn.datasets import make_regression from sklearn.model_selectio…...

解决文件夹打开出错问题:原因、数据恢复与预防措施

在我们日常使用电脑或移动设备时&#xff0c;有时会遇到一个非常棘手的问题——文件夹打开出错。这种错误可能会让您无法访问重要的文件和数据&#xff0c;给工作和生活带来极大的不便。本文将带您深入了解文件夹打开出错的原因&#xff0c;并提供有效的数据恢复方案&#xff0…...

UDS诊断--0x27 SecurityAccess 安全访问服务

1. 服务概述SecurityAccess&#xff08;0x27&#xff09; 是 ISO 14229-1&#xff08;UDS&#xff09;定义的权限鉴权服务&#xff0c;用于客户端&#xff08;诊断仪&#xff09;向服务器&#xff08;ECU&#xff09;获取受保护诊断功能的执行权限。作用&#xff1a;限制未授权…...

DeepSeek-OCR效果展示:模糊倾斜图片也能准确识别,实测案例分享

DeepSeek-OCR效果展示&#xff1a;模糊倾斜图片也能准确识别&#xff0c;实测案例分享 1. 引言 1.1 为什么OCR识别这么难&#xff1f; 你有没有遇到过这样的场景&#xff1f;拍了一张发票照片想报销&#xff0c;结果财务说识别不出来&#xff1b;扫描了一份旧文件&#xff0…...

创建私有云主机

1. 环境准备与规划在搭建IaaS平台之前&#xff0c;合理的硬件与网络规划是成功的关键。本环境基于VMware Workstation搭建&#xff0c;采用双节点架构。1.1 硬件资源配置请严格按照以下标准配置虚拟机&#xff0c;资源不足会导致安装失败或运行卡顿。表格组件内存处理器硬盘网卡…...

PP-DocLayoutV3商业应用:银行票据+政务公文+出版古籍三场景落地案例

PP-DocLayoutV3商业应用&#xff1a;银行票据政务公文出版古籍三场景落地案例 1. 新一代文档布局分析引擎的价值 在日常工作中&#xff0c;我们经常遇到各种文档处理难题&#xff1a;银行票据信息提取繁琐、政务公文格式复杂难解析、古籍文献数字化效率低下。传统OCR技术只能…...

RDMA 核心原理:RoCE v2 与传输操作详解

一、RDMA原理操作 RDMA 传输符合 RoCE v2 协议 RDMA over Converged Ethernet (RoCE) 是一种网络协议&#xff0c;它利用远程直接内存访问 (RDMA) 功能来显着加速托管在服务器集群和存储阵列上的应用程序之间的通信。RoCE 结合了IBTARDMA 语义&#xff0c;允许设备在应用程序级…...

C 标准库 - `<ctype.h>`

C 标准库 - <ctype.h> 概述 在C语言编程中,字符处理是基础且常见的需求。《ctype.h》是C标准库中的一个头文件,提供了丰富的字符处理函数。这些函数用于检测字符的类型(如字母、数字、空白字符等),以及转换字符的大小写。本篇文章将详细介绍 <ctype.h> 头文…...

QY-02-YS 雨量水位监测站 雨水情测报助手

雨量监测站配置1&#xff09;不锈钢支架&#xff0c;高度为1.2米2&#xff09;雨量传感器、水位传感器3&#xff09;太阳能供电&#xff1a;太阳能电池板&#xff0c;蓄电池4&#xff09;数据采集发送器数据传输采用4G和短信息兼容方式&#xff1b;具备向三个&#xff08;或以上…...

亚马逊向忠实Kindle用户“致谢“:停止支持旧款设备

亚马逊正以停止支持旧款设备的方式"回馈"长期忠实的Kindle用户&#xff0c;但同时也试图以新设备八折优惠及电子书购书抵用金来"降低影响"。正如科技领域的规律——没有任何设备能永远获得支持。亚马逊在今日发送给用户的邮件中宣布&#xff0c;自2026年5月…...

多租户下的ERP系统的仓储管理模块分析设计轿

springboot自动配置 自动配置了大量组件&#xff0c;配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后&#xff0c;springboot会根据类路径上的jar包来自动配置bean&#xff08;比如&#xff1a;springboot发现类路径上的MyBatis相关类&#xff…...

【稀缺首发】Blazor Hybrid 2026生产就绪架构图(含MAUI 7.0集成深度):仅开放给前500名订阅者下载的微软Partner认证模板包

第一章&#xff1a;Blazor Hybrid 2026生产就绪架构全景概览Blazor Hybrid 2026代表了微软跨平台富客户端开发的最新演进形态&#xff0c;其核心目标是统一Web与原生体验&#xff0c;在保持Razor语法一致性的同时&#xff0c;深度集成平台能力、离线可靠性、安全沙箱及企业级可…...