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

【网络服务器】——回声服务器(echo)

作用

实现回声服务器的客户端/服务器程序,客户端通过网络连接到服务器,并发送任意一串英文信息,服务器端接收信息后,执行数据处理函数:将每个字符转换为大写并回送给客户端显示。

客户端:发送字符信息

服务器端:数据处理函数

效果演示:

服务器端:

客户端:

过程处理接口:

客户端:socket()->connect()->write()->read()->close()
服务器端:socket()->bind()->listen()->accept()->read()->write() ->read()->close()

客户端源代码(client.c)

分析:

1、生成 句柄fd:SOCK_STREAM(tcp 数据流)SOCK_DGRAM(udp 数据报)

2、连接

3、发送数据(输入)

4、接收数据(输出)

5、关闭句柄,释放资源

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>#define SERVER_PORT 666
#define SERVER_IP  "127.0.0.1"/*带参数运行:./echo_client xxxx
*/int main(int argc, char *argv[]){int sockfd;char *message;struct sockaddr_in servaddr;int n;char buf[64];if(argc < 2){fputs("Usage: ./echo_client message \n", stderr);exit(1);}message = argv[1];printf("message: %s\n", message);//1、生成 句柄fd:SOCK_STREAM(tcp 数据流)SOCK_DGRAM(udp 数据报)sockfd = socket(AF_INET, SOCK_STREAM, 0);memset(&servaddr, '\0', sizeof(struct sockaddr_in));//******* 套路 ********servaddr.sin_family = AF_INET;	//协议族:AF_INET(IPv4)inet_pton(AF_INET, SERVER_IP, &servaddr.sin_addr);//绑定:IP地址 <--> 套接字socketservaddr.sin_port = htons(SERVER_PORT);	//连接网络端口、转换字节序(h:本地 --> ns:网络net,类型short)//*********************//2、连接connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));//3、发送数据(输入)write(sockfd, message, strlen(message));//4、接收数据(输出)n = read(sockfd, buf, sizeof(buf)-1);if(n>0){buf[n]='\0';printf("receive: %s\n", buf);}else {perror("error!!!");}printf("finished.\n");//5、关闭句柄,释放资源close(sockfd);return 0;
}

服务器端源代码(server.c)

分析:

1.(socket)创建信箱

2.(bzero)清空标签,写上地址和端口号

3.(bind)实现标签贴到收信得信箱上

4.(listen)把信箱挂置到传达室,这样,就可以接收信件了

5.(accept)接收客户端连接请求

6.(read)读取客户端发送的数据

(注:处理函数调用位于这两步中间)

7.(write)写入处理后的数据结果

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <ctype.h>
#include <arpa/inet.h>#define SERVER_PORT 666int handle(char* buf,int len){for(int i=0; i<len; i++){/*if(buf[i]>='a' && buf[i]<='z'){buf[i] = buf[i] - 32;}*/buf[i] = toupper(buf[i]);}return 1;
}int main(void){int sock;//代表信箱struct sockaddr_in server_addr;//1.美女创建信箱sock = socket(AF_INET, SOCK_STREAM, 0);//2.清空标签,写上地址和端口号bzero(&server_addr, sizeof(server_addr));//******* 套路 *******server_addr.sin_family = AF_INET;//选择协议族IPV4server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//监听本地所有IP地址server_addr.sin_port = htons(SERVER_PORT);//绑定端口号//********************//3.实现标签贴到收信得信箱上bind(sock, (struct sockaddr *)&server_addr,  sizeof(server_addr));//4.把信箱挂置到传达室,这样,就可以接收信件了listen(sock, 128);//万事俱备,只等来信printf("等待客户端的连接\n");int done =1;while(done){struct sockaddr_in client;int client_sock, len, i;char client_ip[64];char buf[256];socklen_t  client_addr_len;client_addr_len = sizeof(client);//5.接收客户端连接请求client_sock = accept(sock, (struct sockaddr *)&client, &client_addr_len);//打印客服端IP地址和端口号printf("client ip: %s\t port : %d\n",inet_ntop(AF_INET, &client.sin_addr.s_addr,client_ip,sizeof(client_ip)),ntohs(client.sin_port));//6.读取客户端发送的数据len = read(client_sock, buf, sizeof(buf)-1);buf[len] = '\0';printf("receive[%d]: %s\n", len, buf);//处理函数:转换成大写handle(buf,len);//7.写入处理后的数据结果len = write(client_sock, buf, len);printf("finished. len: %d\n", len);close(client_sock);}close(sock);return 0;
}

相关文章:

【网络服务器】——回声服务器(echo)

作用 实现回声服务器的客户端/服务器程序&#xff0c;客户端通过网络连接到服务器&#xff0c;并发送任意一串英文信息&#xff0c;服务器端接收信息后&#xff0c;执行数据处理函数&#xff1a;将每个字符转换为大写并回送给客户端显示。 客户端&#xff1a;发送字符信息 服…...

IDEA在项目中添加模块出现Error adding module to project: null(向项目添加模块时出错: null)的解决方法

解决方法 &#xff08;1&#xff09;打开当前项目的结构...

(34)VTK C++开发示例 ---将图片映射到平面

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 演示如何将图片作为纹理贴图到一个平面上。 这段代码的功能是使用 VTK&#xff08;Visualization Toolkit&#xff0…...

微软与Meta大幅增加人工智能基础设施投入

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

华为云服务器VoceChat在线聊天室部署

目录 1. 项目介绍2. 准备条件3. Docker环境部署3.1 安装Docker&#xff08;CentOS 7&#xff09;3.2 安装Docker Compose3.3 Docker常用命令 4. 创建配置文件4.1 创建工作目录4.2 创建docker-compose.yml文件4.3 保存配置文件 5. 部署运行5.1 启动服务5.2 检查服务状态5.3 防火…...

ERP系统(技术面)知识积累

本文为本人在准备某公司信息技术类岗位的面试时所作的笔记&#xff0c;该公司有技术面&#xff0c;此岗位入职后负责的是ERP系统的运行和维护&#xff0c;所以可能会问ERP系统相关的问题。故我写此文以做准备。 ERP简介 ERP&#xff0c;全称Enterprise Resource Planning&…...

Python学习笔记(第三部分)

接续 Python.md 文件的第三部分 类 类的创建的基本使用 创建一个类 class Dog(): 文档字符串&#xff1a;这是一次模拟小狗的简单尝试 def __init__(self,name,age):self.name nameself.age agedef sit(self):print(self.name.title() " is now sitting.")def ro…...

【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)

&#x1f35e;自我激励&#xff1a;每天努力一点点&#xff0c;技术变化看得见 文章目录 Java语言概述Java是什么Java语言的重要性Java语言发展简史Java语言特性 第一个Java程序main方法示例运行Java程序JDK、JRE、JVM之间的关系注释基本规则注释规范 标识符关键字 Java语言概述…...

【FreeRTOS-列表和列表项】

参照正点原子以及以下gitee笔记整理本博客&#xff0c;并将实验结果附在文末。 https://gitee.com/xrbin/FreeRTOS_learning/tree/master 一、列表和列表项的简介(熟悉) 1、什么是列表 答&#xff1a;列表是FreeRTOS中的一个数据结构&#xff0c;概念上和链表有点类似&#…...

22.2Linux的I2C驱动实验(编程)_csdn

我尽量讲的更详细&#xff0c;为了关注我的粉丝&#xff01;&#xff01;&#xff01; 这里我们用到的是stm32mp157的板子&#xff0c;所以我们看一下I2C用到的引脚。 1、硬件原理图分析 可以看到在这块板子上面用的SDA和SCL总线是PA11,PA12。所以要修改设备树和镜像文件&…...

socket-IO复用技术

五个I/O模型 1、阻塞I/O 2、非阻塞I/O 3、I/O复用&#xff08;select和poll&#xff09; 4、信号驱动I/O 5、异步I/O I/O复用 是一种在单线程或单进程环境下&#xff0c;同时监听多个 I/O 事件的技术。它允许程序高效地处理多个输入输出流&#xff08;如网络套接字、文件描…...

上位机知识篇---二进制操作

文章目录 前言接收数据示例:0xAA 0x12 0x34 0x55合并高/低字节数据RGB565颜色值:0xF800(红色)Python中负数右移接收帧:01 03 02 12 34 CRC前言 本文简单对单片机、上位机中的映射(Mapping)和位移操作符(Bit Shifting)等相关知识进行了简单介绍. 一、单片机与上位机中…...

openEuler 22.03 安装 Mysql 5.7,TAR离线安装

目录 一、检查系统是否安装其他版本Mariadb数据库二、环境检查2.1 必要环境检查2.2 在线安装&#xff08;有网络&#xff09;2.3 离线安装&#xff08;无网络&#xff09; 二、下载Mysql2.1 在线下载2.2 离线下载 三、安装Mysql四、配置Mysql五、开放防火墙端口六、数据备份七、…...

《排序算法总结》

引言&#xff1a; 编程学到现在&#xff0c;我们已经接触了很多种排序算法&#xff0c;这篇文章我就对常见的几种排序算法进行一个小结。 一&#xff1a; 排序算法分类&#xff1a; 二&#xff1a; 插入排序&#xff1a; 直接插入排序&#xff1a; 1. 概念&#xff1a; 直…...

【Java学习笔记】递归

递归&#xff08;recursion&#xff09; 思想&#xff1a;把一个复杂的问题拆分成一个简单问题和子问题&#xff0c;子问题又是更小规模的复杂问题&#xff0c;循环往复 本质&#xff1a;栈的使用 递归的注意事项 &#xff08;1&#xff09;需要有递归出口&#xff0c;否者就…...

体系学习1:C语言与指针1——预定义、进制打印、传参为数组

1、不对一段代码进行编译 #if 0 statement #endif2、输出地址 int d[3]{1,2,3}; printf("%p",(void*)d);//p期待的是void*类型的数据3、不同进制的打印 int data 1200; char hed[9];//为\0预留位置&#xff01;&#xff01;&#xff01; sprintf(hed,"%08X&…...

使用Java正则表达式进行分组与匹配文本提取

在Java开发中&#xff0c;正则表达式&#xff08;Regex&#xff09;是处理字符串的强大工具&#xff0c;广泛应用于数据验证、文本解析和格式转换等场景。通过正则表达式的分组功能&#xff0c;开发者可以精确地提取匹配模式的子部分&#xff0c;而不仅仅是整个匹配内容。Java的…...

RAGFlow上传3M是excel表格到知识库,提示上传的文件总大小过大

环境&#xff1a; Ragflowv0.17.2 问题描述&#xff1a; RAGFlow上传3M是excel表格到知识库&#xff0c;提示上传的文件总大小过大 解决方案&#xff1a; 定位问题&#xff1a; 1.查询Nginx 日志 Nginx 日志 检查 Nginx 配置中日志路径是否正确&#xff0c;确保日志文件有…...

2025年4月文章一览

2025年4月编程人总共更新了30篇文章&#xff1a; 1.2025年3月文章一览 2.《Operating System Concepts》阅读笔记&#xff1a;p528-p544 3.《Operating System Concepts》阅读笔记&#xff1a;p545-p551 4.《Operating System Concepts》阅读笔记&#xff1a;p552-p579 5.…...

2025大模型微调视频课程全套(附下载)

2025大模型微调视频课程全套&#xff0c;共10课。主要内容如下&#xff1a; 1、大模型的发展 2、Transformer & LLMs 3、大模型微调预览&Lora微调&Alpaca模型微调 4、Alpaca&AdaLoRA&QLoRA模型微调 5、Efficient Fine-tuning&Efficient Inference&…...

【Python Web开发】04-Cookie和Session

文章目录 1. Cookie1.1 定义1.2 工作原理1.3 用途1.4 优缺点 2. Session2.1 定义2.2 工作原理2.3 用途2.4 优缺点 3. Cookie 与 Session 的关系4. 安全性考量5. Python 中使用 Cookie 和 Session 在 HTTP 协议里&#xff0c;Cookie 和 Session 是用于管理客户端与服务器之间会话…...

从股指到期指,哪些因素影响基差?

当我们谈论股指期货&#xff08;简称“期指”&#xff09;与股票现货指数&#xff08;简称“股指”&#xff09;的基差时&#xff0c;其实是在探讨期货价格与现货价格之间的“差价”。这个差价受多种因素影响&#xff0c;时而扩大&#xff0c;时而缩小&#xff0c;甚至可能“翻…...

n8n 中文系列教程_15. 【工具篇】n8n中文版与汉化指南:从原理到实践

n8n 作为一款强大的开源自动化工具&#xff0c;目前尚未推出官方中文版&#xff0c;但社区提供了汉化方案。不过&#xff0c;对于技术用户&#xff0c;我们更推荐使用英文原版&#xff0c;以便更好地查阅文档和解决问题。如果你仍希望尝试汉化&#xff0c;本文将详细介绍如何通…...

3D版同步帧游戏

以下是实现一个3D版同步帧游戏的详细步骤与完整代码示例。我们将以第一人称射击游戏(FPS)为原型,重点讲解3D空间中的同步机制优化。 项目升级:3D版核心改动 1. 3D坐标系与消息结构 // common/messages.go type Vector3 struct {X float32 `json:"x"`Y float32 `…...

C语言中数字转化为字符串的方法

C语言中数字转化为字符串的方法 1. 使用 sprintf 函数 这是 stdio.h 头文件中的标准库函数 &#xff0c;功能类似于 printf &#xff0c;但不是输出到控制台&#xff0c;而是将格式化后的内容输出到字符数组&#xff08;字符串&#xff09;中。 示例代码&#xff1a; c #inc…...

使用MGeo模型高精度实现文本中地址识别

一、功能与安装 1、模型地址 模型是阿里开发的门址高精度识别模型。 https://modelscope.cn/models/iic/mgeo_geographic_elements_tagging_chinese_base/summary 注意&#xff1a;不能自己安装包&#xff0c;没法解决依赖问题&#xff0c;直接按照官方要求安装下面的包&am…...

OpenGL-ES 学习(15) ----纹理

目录 纹理简介纹理映射纹理映射流程示例代码&#xff1a;纹理的环绕和过滤方式纹理的过滤方式 纹理简介 现实生活中&#xff0c;纹理(Texture) 类似于游戏中皮肤的概念&#xff0c;最通常的作用是装饰 3D 物体&#xff0c;它像贴纸一样贴在物体的表面&#xff0c;丰富物体的表…...

类成员函数编译链接的过程

1.静态成员函数和普通成员函数 源文件编译成目标文件&#xff0c;静态成员函数和普通成员函数在目标文件代码段&#xff0c;函数添加进了符号表&#xff0c;地址是在代码段的相对地址&#xff0c;这个地址只是一个临时地址因为后面链接时还要合并代码段&#xff0c;函数地址还…...

PostgreSQL:pgAdmin 4 使用教程

pgAdmin 4 是一个用于管理和维护 PostgreSQL 数据库的强大工具。它提供了一个图形化界面&#xff0c;使用户能够轻松地连接到数据库、创建表、运行 SQL 语句以及执行其他数据库管理任务。 安装和使用 安装 pgAdmin 4 安装 pgAdmin 4 非常简单。下载并运行安装程序&#xff0…...

*(解引用运算符)与 ++(自增运算符)的优先级

在 C 和 C 等编程语言里&#xff0c;*&#xff08;解引用运算符&#xff09;与 &#xff08;自增运算符&#xff09;的执行优先级高低&#xff0c;要依据 是前缀形式还是后缀形式来确定。下面为你详细分析&#xff1a; 1. 后缀 运算符 后缀 运算符的优先级比 *&#xff08…...

二叉搜索树中的搜索(递归解决)

700. 二叉搜索树中的搜索 - 力扣&#xff08;LeetCode&#xff09; 二叉搜索树&#xff08;BST&#xff09;&#xff1a;以任意节点为根节点的数值大于其左子树所有节点的值&#xff0c;小于右子树所有节点的值。 查找二叉搜索树中的值&#xff0c;要利用节点之间的大小关系。…...

idea安装

1.卸载 2.安装 3.ssh...

在ASP.NET MVC中使用Repeater指南

虽然ASP.NET MVC框架本身不包含Web Forms中的Repeater控件&#xff0c;但您可以通过几种方式实现类似的功能。以下是几种在MVC中实现Repeater效果的方法&#xff1a; 1. 使用foreach循环 最简单的方法是直接在视图中使用Razor的foreach循环&#xff1a; csharp model IEnumer…...

【C语言常用字符串解析】

总结一下在 C 语言中用于字符串解析&#xff08;特别是从文件中读取行并提取数据&#xff09;的常用函数、 核心任务&#xff1a; 通常是从文件中读取一行文本&#xff08;一个字符串&#xff09;&#xff0c;然后从这个字符串中提取出需要的数据&#xff08;比如数字、单词等…...

基于深度学习农作物叶部病害实时检测系统研究(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

『MCP』初体验

『MCP』初体验 介绍 MCP 其实就是 Function Calling 的一个统一接口协议&#xff0c;网上介绍会有很多&#xff0c;所以这里不就重复介绍&#xff0c;这里主要是想记录说明一下 MCP 使用体验&#xff0c;可以帮助新人入门一下 安装 VSCode 以及 MCP client VSCode 自行安装…...

前端面试宝典---webpack原理解析,并有简化版源码

前言 先看一下webpack打包后的bundle.js&#xff0c;前边的直接扫一眼就过&#xff0c;可以发现这个立即执行函数的形参就是一个&#xff0c;key为引入文件路径&#xff0c;value为该模块代码的函数。 所以比较重要的就是通过webpack的配置文件中的entry的入口文件&#xff0c…...

负载均衡深度实践:基于Nginx+Keepalived的高可用方案与Zabbix监控设计

目录 综合实践-部署负载均衡 1 环境准备 2 zabbix监控nginx和keeplive 2.1 nginx安装 2.2 安装keepalived 2.3 部署vue 2.4 安装agent 2.5 zabbix监控nginx配置 2.6 zabbix监控keeplived 3 zabbix监控jar 3.1 安装agent 3.2 安装jdk 3.3 部署jar包 3.4 配置web 4…...

深度学习基础--目标检测入门简介

博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​ 博客主页&#xff1a;羊小猪~~-CSDN博客 内容简介&#xff1a;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒​&#x1f338;​ 往期回顾&#xff1a;yolov5基础–一步一步教…...

Redis ⑧-RESP | 渐进式遍历 | 数据库管理

Redis data-types 除了之前学习的 string、hash、list、set、Zset 五种数据结构之外&#xff0c;Redis 还提供了 bitmap、bitfield、 hyperloglog、geospatial、stream 等数据结构。 另外的一些数据结构&#xff0c;都是在某些特定环境下才会使用&#xff0c;使用频率不高&…...

【Android】四大组件之ContentProvider

目录 一、什么是 ContentProvider 二、创建和使用 ContentProvider 三、跨应用权限控制 四、数据变更通知 五、多表关联与视图 六、异步处理 你手机里的通讯录&#xff0c;存储了所有联系人的信息。如果你想把这些联系人信息分享给其他App&#xff0c;就可以通过ContentP…...

Qwen3 发布:优化编码与代理能力,强化 MCP 支持引领 AI 新潮流

人工智能领域的每一次重大突破都如同璀璨星辰&#xff0c;照亮了人类前行的道路。2025 年 4 月 29 日凌晨&#xff0c;阿里巴巴旗下的 Qwen 官方团队正式发布了最新一代大语言模型 ——Qwen3&#xff0c;犹如一颗重磅炸弹&#xff0c;在 AI 领域掀起了惊涛骇浪。此次发布&#…...

LEETERS题解

【题目描述】 给出一个rowcolrowcol的大写字母矩阵&#xff0c;一开始的位置为左上角&#xff0c;你可以向上下左右四个方向移动&#xff0c;并且不能移向曾经经过的字母。问最多可以经过几个字母。 【输入】 第一行&#xff0c;输入字母矩阵行数RR和列数SS&#xff0c;1≤R,S≤…...

图像加密算法概述

版本: 1.0 日期: 2025年5月1日 目录 引言 1.1 什么是图像加密?1.2 为什么需要图像加密?1.3 图像数据的特点与加密挑战加密基础概念 2.1 明文与密文2.2 加密与解密2.3 密钥2.4 对称加密与非对称加密为什么传统文本加密算法不完全适用于图像? 3.1 数据量巨大3.2 高度冗余性…...

loads、dumps、jsonpath使用场景

在处理JSON数据时&#xff0c;loads、dumps 和 jsonpath 是三个非常有用的工具或概念。它们各自在不同的场景下发挥作用&#xff0c;让我们一一来看&#xff1a; 1. loads loads 函数是 Python 中 json 模块的一部分&#xff0c;用于将 JSON 格式的字符串解析成 Python 的数据…...

Winform(7.序列化方式整理)

今天我又对序列化方式进行了整理,可以与上一篇序列化方式一起看 一.序列化方式(四种) 1.二进制序列化 //定义 Person 类,需要标记为可序列化 [Serializable] public class Person { public string Name{get;set;} public int Age{get;set;} } 在进行二进制序列化…...

通过AI的联网功能提升搜索检索能力

以百度ai搜索&#xff08;百度AI搜索 - 办公学习一站解决&#xff09;为例&#xff0c;ai会自动根据问题搜集现有互联网文章&#xff0c;避免人工通过传统检索引擎的结果逐个去查找&#xff0c;这种方式文章的相关性会更高。 tip&#xff1a;快速查看每篇文档&#xff0c;仅关…...

Spring IoC容器的设计与实现

Spring整体架构与模块划分 核心容器&#xff08;Core Container&#xff09; spring-core 基础工具类&#xff1a;如资源加载&#xff08;Resource接口&#xff09;、反射工具&#xff08;ReflectionUtils&#xff09;、类型转换&#xff08;ConversionService&#xff09;。…...

使用vue的插值表达式渲染变量,格式均正确,但无法渲染

如图&#xff0c;作者遇到的问题为&#xff0c;输入以下代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...

数据库 AI 助手测评:Chat2DB、SQLFlow 等工具如何提升开发效率?

一、引言:数据库开发的 “效率革命” 正在发生 在某互联网金融公司的凌晨故障现场,资深 DBA 正满头大汗地排查一条执行超时的 SQL—— 该语句涉及 7 张核心业务表的复杂关联,因索引缺失导致全表扫描,最终引发交易系统阻塞。这类场景在传统数据库开发中屡见不鲜:据 Gartne…...