【纪念365天】我的创作纪念日
过去的一年
没有注意加入csdn已经有一年了。 这几天翻看小猴儿的通知才发现时间来到了一年的纪念日。稍稍思索想要将这一段时间的学习到的知识以及偶然遇到的机遇做一下总结。
上一次写纪念日是来到csdn128天的时候, 200天前我的学习状态是非常疯狂的。 只记得我当时两个月的时间就跟着网课学完了数据结构和c++。学习c++和数据结构是很有意思的, 跟着网课学习完一节课, 我就将对应的代码敲出来, h文件一个接着一个的开,反复的敲, 基本上每一种数据结构我都能敲三四遍。 还记得当时我有一个c++源文件里面有一万多行代码, 后来被我不小心删掉了, 我只在gitee上面找回了四五千行, 这让我心痛了好一阵。
c++和数据结构是有意思的, 但是linux是没意思的。 c++学习完之后, 我学了linux, 同样看的网课。 linux的网课老师讲的很好。 我能看出来老师已经尽量将linux讲的有意思, 讲的生动。 但是很可惜, linux作为计算机世界的哲学, 它有着将课堂的趣味性一减再减的魔力, 让我看着看着就走神了。 没办法, 我只能重新点击键盘左方向键——重新看一遍。你说linux你学的很快?好吧, 可能是我学习的积极性有所下降。 也确实, 我的学习积极性当时是有所下降的。——7月份的天气太热, 让我不自觉打开冰箱拿出一个冰棍,吃一口的同时再打开手机刷一下视频, 然后碎片化的时间不允许我的学习效率提高上去。 结果就是,我从7月份到10月份linux只学习完系统编程。但是! 当我看着我身边的同学们连操作系统是啥都不知道的时候, 原谅我的嘴角抽动了一下。 我知道这不对,我学校的课都没学,用学习学校线代, 英语这种基石学科的时间学习来学习专业课, 好像并不足以我感到有那一丝优越感。
所以我学习线代了,所以我学习英语了。 ——我上课不拿电脑了, 可能老师们上课的时候会发现课堂上少了那一个在最后一排拿电脑上课的同学。他们会想是不是这个同学更过分不来上课了? 所以他们签到的劲头更足,他们变着花样签到, 甚至发了签到却在课堂上说不让我们签。那些在宿舍睡大觉的人可能起来的时候一看到签到了, 一下子就签了, 可怜的倒霉鬼不知道的是老师在课堂上预判了他的操作。 但是任老师花样百出, 我上课了!我在学习线代!我在学习英语!四级通过的大门我来了!机器学习房间的门槛你即便高我也在接近你。 AI大模型他们说需要机器学习的功底,b站上面的机器学习课程带着英语的讲解让我着迷, 这些成为了我想要学习线代和英语的无限动力! linux的网络编程别担心, 我马上就会重新学你。 mysql数据库你别得意, 你快被我学完啦。 早晨的脑子累只是一下子, 算法一道题过后让我清醒。AI你别躲藏, 机器学习我迟早学习你。这么多东西, 这么多知识。还是太菜了。但是!菜就多练。
所得收获
在csdn创作的收获是无穷无尽的, 粉丝、 阅读量的增长与ip的维护是一方面。 认识同道的大佬更是一个能鞭策自己不辍修行, 给自己指引方向的明灯。 所以,在csdn创作已经是收获,其他更是受益匪浅。
成就
在过去写的最好的一段代码可能就是在网络编程写的客户端和服务端代码,网络编程真的让人感觉不可思议, 我在测试的时候甚至让我的服务器和window系统连接通信!下面是tcp协议的服务端代码:
//server:#pragma once
#include "Log.hpp"
#include <iostream>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "ThreadPool.hpp"
#include "Task.hpp"
#include <sys/wait.h>
#include <unistd.h>
#include"daemon.hpp" using namespace std;const int defaultfd = -1;
const int defaultport = 8080;
const string defaultip = "0.0.0.0";
const int backlog = 10; // 直接用,一般不要设置的太大。class TcpServer; // 声明class ThreadData
{
public:ThreadData(int fd, string ip, uint16_t port, TcpServer *const t): sockfd_(fd), clientip_(ip), clientport_(port), t_(t){}public:int sockfd_;string clientip_;uint16_t clientport_;public:TcpServer *const t_;
};Log lg;enum
{SockError = 2,BindError,ListenError
};class TcpServer
{
public:TcpServer(int port = defaultport, string ip = defaultip, int sockfd = defaultfd): listensockfd_(sockfd), ip_(ip), port_(port){}void InitServer(){listensockfd_ = socket(AF_INET, SOCK_STREAM, 0);if (listensockfd_ < 0){lg(Fatal, "create socket, errno: %d, strerror: %s", errno, strerror(errno));exit(SockError);}//lg(Info, "create socket success, sockfd: %d", listensockfd_);struct sockaddr_in local;memset(&local, 0, sizeof(local));local.sin_family = AF_INET;local.sin_port = htons(port_);inet_aton(ip_.c_str(), &(local.sin_addr)); // 主机序列转网络学列。 inet_aton是一个线程安全的函数。// 绑定if (bind(listensockfd_, (sockaddr *)&local, sizeof(local)) < 0){lg(Fatal, "bind error, errno: %d, strerror: %s", errno, strerror(errno));exit(BindError);}// tcp面向字节流, 是被动的, 所以要将对应的socket设置为监听状态。if (listen(listensockfd_, backlog) < 0) // backlock表示的是底层全连接队列的长度。 这个参数对意思, 不做解释。{lg(Fatal, "Listen error, errno: %d, strerror: %s", errno, strerror(errno));exit(ListenError);}lg(Info, "Listen has success");}void Start(){Daemon();ThreadPool<Task>::GetInstance()->Start();lg(Info, "tcpServer is running...");for (;;) // tcp协议也是一种一直处于运行的服务{// tcp是面向连接的, 所以他比udp还多了一步accept, 先将客户端与服务端连接起来。accept的返回值成功返回整数文件描述符,否则-1被返回, 错误码被设置// 1、获取新连接,struct sockaddr_in client; // 获取的是客户端的addrsocklen_t len = sizeof(client);int sockfd = accept(listensockfd_, (sockaddr *)&client, &len); // accept成功, 就能知道是谁连接的我。if (sockfd < 0) // 关于这两个套接字, sockfd_的核心工作就只是把链接获取上来, 未来进行IO操作, 看的是sockfd。{lg(Waring, "listen error, errno: %d, strerror: %s", errno, strerror(errno));continue;}uint16_t clientport = ntohs(client.sin_port); // 网络序列转主机序列char clientip[32];inet_ntop(sockfd, &client.sin_addr, clientip, sizeof(clientip));// 2、根据新连接进行通信lg(Info, "get a new link..., sockfd:%d, clientport: %d, clientip: %s", sockfd, clientport, clientip);// version--4线程池版本Task task_(sockfd, clientip, clientport);ThreadPool<Task>::GetInstance()->Push(task_);}}~TcpServer(){}private:int listensockfd_; // 监听套接字, 只用来升起服务器, 接收链接uint16_t port_;string ip_;
};
憧憬
憧憬有很多, 但是看不清的也有很多。 有点憧憬与迷茫交织, 有的则是冲突。 简单的, 最近的就是能够在学期内学习完linux, 把线代和英语学好吧。
——2024-11-26
相关文章:
【纪念365天】我的创作纪念日
过去的一年 没有注意加入csdn已经有一年了。 这几天翻看小猴儿的通知才发现时间来到了一年的纪念日。稍稍思索想要将这一段时间的学习到的知识以及偶然遇到的机遇做一下总结。 上一次写纪念日是来到csdn128天的时候, 200天前我的学习状态是非常疯狂的。 只记得我当时…...
Opencv+ROS实现颜色识别应用
目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像:RGB(红,绿,蓝) HSV图像:H࿰…...
蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)
别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! ! ! 关注博主,更多蓝桥杯nice题目静待更新:) 动态规划 三、括号序列 【问题描述】 给定一个括号序列,要求尽可能少地添加若干括号使得括号序列变得合…...
C++设计模式(单例模式)
一、介绍 1.动机 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是类设计者的…...
前端---CSS(部分用法)
HTML画页面--》这个页面就是页面上需要的元素罗列起来,但是页面效果很差,不好看,为了让页面好看,为了修饰页面---》CSS CSS的作用:修饰HTML页面 用了CSS之后,样式和元素本身做到了分离的效果。---》降低了代…...
2024年最新版Java八股文复习
最新版本Java八股文复习,每天更新一篇,博主正在持续努力更新中~~~ 一、Java基础篇1、怎么理解面向对象?简单说说封装、继承、多态三大特性?2、多态体现在哪几个方面?3、面向对象的设计原则你知道有哪些吗?4…...
计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
MyBatis高级扩展
一、Mapper批量映射优化: 1.需求: Mapper 配置文件很多时,在全局配置文件中一个一个注册太麻烦,希望有一个办法能够一劳永逸 2.配置方式: Mybatis允许在指定Mapper映射文件时,只指定其所在的包: <mappers><package name"c…...
代码美学2:MATLAB制作渐变色
效果: %代码美学:MATLAB制作渐变色 % 创建一个10x10的矩阵来表示热力图的数据 data reshape(1:100, [10, 10]);% 创建热力图 figure; imagesc(data);% 设置颜色映射为“cool” colormap(cool);% 在热力图上添加边框 axis on; grid on;% 设置热力图的颜色…...
浅谈- “ 变量中 无符号 与 有符号 的 值转换 ”
在同一个表达式中,若同时出现 无符号变量 与 有符号变量 : 1、都转换为无符号类型:(注:2^324294967296)即unsigned int 的最大值 2、然后再运行表达式 实例: #include <stdio.h>char fun(…...
【AI绘画】Midjourney进阶:色调详解(上)
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯Midjourney中的色彩控制为什么要控制色彩?为什么要在Midjourney中控制色彩? 💯色调白色调淡色调明色调 💯…...
代码管理之Gitlab
文章目录 Git基础概述场景本地修改未提交,拉取远程代码修改提交本地,远程已有新提交 GitIDEA引入Git拉取仓库代码最后位置 Git基础 概述 workspace 工作区:本地电脑上看到的目录; repository 本地仓库:就是工作区中隐…...
防御网络攻击的创新策略
关键要点 ● 了解各种类型的网络攻击对于组织加强防御至关重要。 ● 制定敏捷的网络安全策略可帮助企业快速应对新出现的威胁。 ● 跨行业协作和威胁情报共享可以增强整体安全性。 网络攻击威胁日益严重 网络攻击的数量和复杂程度急剧增加,对全球组织构成了重大…...
C++软件设计模式之组合模式概述
组合模式(Composite Pattern)是C软件设计模式中的一种,主要用于解决对象的层次结构问题。它允许你将对象组合成树形结构来表示“部分-整体”的层次结构,使得客户端可以统一地处理单个对象和组合对象。 主要用于解决的问题&#x…...
利用HTML5和CSS来实现一个漂亮的表格样式
利用HTML5和CSS来实现一个漂亮的表格样式 第一步:创建HTML结构第二步:添加CSS样式第三步:响应式设计第四步:加入交互效果 第一步:创建HTML结构 我们将用HTML创建一个基本的表格结构。代码如下: <!DOCT…...
Vivado程序固化到Flash
在上板调试FPGA时,通常使用JTAG接口下载程序到FPGA芯片中,FPGA本身是基于RAM工艺的器件,因此掉电后会丢失芯片内的程序,需要重新烧写程序。但是当程序需要投入使用时不能每一次都使用JTAG接口下载程序,一般FPGA的外围会…...
HCIA笔记3--TCP-UDP-交换机工作原理
1. tcp协议 可靠的连接 1.1 报文格式 1.2 三次握手 1.3 四次挥手 为什么TIME_WAIT需要2MSL的等待时间? (a) 为了实现可靠的关闭 (b)为了让过期的报文在网络上消失 对于(a), 假设host发给server的last ack丢了。 ser…...
计算机网络的功能
目录 信息交换 资源共享 分布式处理 可靠性增强 集中管理 信息交换 计算机网络最基本的功能之一是允许不同设备之间的数据通信。这包括电子邮件的发送和接收、即时消息的传递、文件传输等。通过网络,用户可以轻松地与全球各地的其他人进行沟通和协作。 信息交…...
Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
14.1 命令请求的执行过程 一个命令请求从发送到获得回复的过程中,客户端和服务器都需要完成一系列操作。 14.1.1 发送命令请求 当用户在客户端中输入一个命令请求的时候,客户端会把这个命令请求转换为协议格式,然后通过连接到服务器的套接字…...
多输入多输出 | Matlab实现TCN-GRU时间卷积神经网络结合门控循环单元多输入多输出预测
多输入多输出 | Matlab实现TCN-GRU时间卷积神经网络结合门控循环单元多输入多输出预测 目录 多输入多输出 | Matlab实现TCN-GRU时间卷积神经网络结合门控循环单元多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现TCN-GRU时间卷积…...
6表单全链路工程化AI开发体系使用方案
6表单全链路工程化AI开发体系使用方案 一、体系整体概述 核心定位与价值 本方案对应的6个表单,是一套覆盖项目启动→需求收敛→标准前置→开发执行→风险管控→验收闭环全流程的工程化AI人机协同管控体系,核心解决AI辅助开发中「需求模糊→AI输出偏离→反复返工→交付失控」的…...
如何高效解析和生成PSD文件:Ag-PSD库完整指南
如何高效解析和生成PSD文件:Ag-PSD库完整指南 【免费下载链接】ag-psd Javascript library for reading and writing PSD files 项目地址: https://gitcode.com/gh_mirrors/ag/ag-psd 在当今数字设计工作流中,Photoshop文档(PSD&#…...
UniApp二维码生成避坑指南:解决常见Canvas渲染问题
UniApp二维码生成避坑指南:解决常见Canvas渲染问题 在移动应用开发中,二维码功能已成为用户交互的标配。UniApp作为跨平台开发框架,其Canvas组件在实现二维码生成时却存在诸多"暗礁"。本文将深入剖析五个典型场景下的Canvas渲染陷阱…...
Linux服务器安装Linux宝塔面板并部署wordpress网站以及雷池WAF,设置禁止使用IP地址访问网站,只能使用域名访问网站
一、Linux服务器安装Linux宝塔面板 这个步骤参考网上其他教程。 二、Linux宝塔面板部署wordpress网站 这个步骤参考网上其他教程,保证网站能够正常访问,并且使用Linux宝塔面板申请并部署了SSL证书,使用https协议默认443端口正常访问网站。 三…...
OS17.【Linux】进程基础知识(1)
目录 1.浅层定义 程序和进程的区别 2.查看进程的方法 ps ajx top 查看/proc目录 编辑 PID 3.手动用ps查看自己运行的程序 在/proc手动查看自己运行的程序目录 杀死进程的常用方法 进程目录中的文件 cwd 理解"当前路径"的含义 4.如何管理一个进程 程…...
3大核心技术构建ESP32智能语音交互系统:从离线唤醒到物联网控制的完整实现方案
3大核心技术构建ESP32智能语音交互系统:从离线唤醒到物联网控制的完整实现方案 【免费下载链接】xiaozhi-esp32 Build your own AI friend 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 在物联网和智能硬件快速发展的今天,如…...
Faster-Whisper架构解析:基于CTranslate2的高性能语音识别优化方案
Faster-Whisper架构解析:基于CTranslate2的高性能语音识别优化方案 【免费下载链接】faster-whisper plotly/plotly.js: 是一个用于创建交互式图形和数据可视化的 JavaScript 库。适合在需要创建交互式图形和数据可视化的网页中使用。特点是提供了一种简单、易用的 …...
噪声系数测试中的Y因子:为什么ENR超噪比是你的关键指标?
噪声系数测试中的Y因子:为什么ENR超噪比是你的关键指标? 在无线通信系统的设计与验证中,噪声系数(Noise Figure)是衡量接收机灵敏度的核心参数之一。而Y因子法作为噪声系数测试的黄金标准,其准确度很大程度…...
Keil多工程工作空间创建与管理实践
Keil系列教程14:创建多工程工作空间的技术实践1. 项目概述在嵌入式开发中,当项目复杂度增加时,往往需要管理多个相互关联的工程。Keil MDK-ARM开发环境提供了多工程工作空间(Multi-Project Workspace)功能,…...
Uvicorn终极指南:如何快速构建高性能Python异步Web服务器
Uvicorn终极指南:如何快速构建高性能Python异步Web服务器 【免费下载链接】uvicorn An ASGI web server, for Python. 🦄 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn Uvicorn是一款专为Python设计的轻量级ASGI Web服务器…...
