HTTP FTP SMTP TELNET 应用协议
1. 标准和非标准的应用协议
- 标准应用协议:
- 由标准化组织(如 IETF,Internet Engineering Task Force)制定和维护,具有广泛的通用性和互操作性。这些协议遵循严格的规范和标准,不同的实现之间可以很好地进行通信。
- 例如:
- HTTP(Hypertext Transfer Protocol):是用于传输超文本的协议,基于请求 - 响应模型,广泛应用于 Web 领域,支持多种数据格式(如 HTML、JSON、XML 等)的传输。
- FTP(File Transfer Protocol):专门用于在网络上进行文件传输的协议,提供了上传和下载文件的功能,有主动和被动两种传输模式。
- SMTP(Simple Mail Transfer Protocol):用于发送电子邮件的协议,规定了邮件客户端与邮件服务器之间以及邮件服务器之间如何传输邮件。
- TELNET:早期用于远程登录的协议,允许用户通过网络连接到远程计算机并执行命令,但由于其传输数据未加密,存在安全风险,逐渐被 SSH(Secure Shell)替代。
- 非标准应用协议:
- 是为了满足特定应用程序或服务的需求而自定义的协议。通常在一些特定的行业、企业内部或特定的系统中使用。
- 优点是可以根据具体需求进行灵活设计,实现一些标准协议无法提供的功能。但缺点是缺乏通用性,不同实现之间的兼容性可能较差。
2. 使用标准应用的例子
-
HTTP:
- 在 Web 浏览中,浏览器作为客户端向 Web 服务器发送 HTTP 请求,服务器接收到请求后处理并返回 HTTP 响应。请求方法常见的有 GET(获取资源)、POST(提交数据)等。

-
FTP:
- 用户可以使用 FTP 客户端软件(如 FileZilla)连接到 FTP 服务器,通过用户名和密码进行身份验证后,进行文件的上传和下载操作。
-
SMTP:
-
当用户使用邮件客户端(如 Outlook、Thunderbird)发送邮件时,客户端会将邮件按照 SMTP 协议封装成邮件消息,并发送到邮件服务器,邮件服务器再将邮件转发到目标邮件服务器。

-
-
TELNET:
- 可以使用 TELNET 客户端软件(如 Windows 系统自带的 Telnet 客户端)连接到远程计算机,输入用户名和密码进行登录,然后在远程计算机上执行命令。
3. 使用 TELNET 访问其他服务
- TELNET 虽然主要用于远程登录,但由于它是基于 TCP 协议的简单文本协议,也可以用于与其他支持文本协议的服务进行交互。例如,通过 TELNET 可以手动向 HTTP 服务器发送 HTTP 请求,模拟浏览器的行为。
4. 应用协议和软件的灵活性
- 应用协议的灵活性对于适应不同的应用场景和需求至关重要。一个灵活的协议应该能够方便地进行扩展和定制。
- 例如,HTTP 协议通过添加自定义头部(如
X - Custom - Header)可以在不改变协议基本结构的情况下,传递额外的信息,实现一些特定的功能,如身份验证、版本控制等。
5. 从提供者角度看服务
- 服务提供者在设计和实现服务时,需要考虑多个方面的因素:
- 可用性:确保服务在大多数时间内都可以正常访问,通常采用冗余设计、负载均衡等技术来提高服务的可用性。
- 性能:优化服务的响应时间和吞吐量,例如使用缓存技术、异步处理等方法。
- 安全性:保护服务的数据和通信安全,防止数据泄露、恶意攻击等。例如,Web 服务器可以使用 HTTPS(HTTP over SSL/TLS)协议对数据进行加密传输。
C++ 代码示例
1. 基本的 TCP 客户端
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>void tcp_client(const char* host, int port) {// 创建 socket 对象int client_socket = socket(AF_INET, SOCK_STREAM, 0);if (client_socket == -1) {std::cerr << "Failed to create socket" << std::endl;return;}// 设置服务器地址sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(port);if (inet_pton(AF_INET, host, &server_addr.sin_addr) <= 0) {std::cerr << "Invalid address/ Address not supported" << std::endl;close(client_socket);return;}// 连接到服务器if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {std::cerr << "Connection failed" << std::endl;close(client_socket);return;}// 发送数据const char* message = "Hello, Server";if (send(client_socket, message, strlen(message), 0) == -1) {std::cerr << "Send failed" << std::endl;close(client_socket);return;}// 接收数据char buffer[1024] = {0};int valread = read(client_socket, buffer, 1024);if (valread == -1) {std::cerr << "Read failed" << std::endl;} else {std::cout << "Received: " << buffer << std::endl;}// 关闭连接close(client_socket);
}int main() {tcp_client("127.0.0.1", 8080);return 0;
}
2. 使用 TELNET 访问 HTTP 服务的 C++ 示例
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>void telnet_http_request(const char* host, int port, const char* request) {// 创建 socket 对象int sock = socket(AF_INET, SOCK_STREAM, 0);if (sock == -1) {std::cerr << "Failed to create socket" << std::endl;return;}// 设置服务器地址sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(port);if (inet_pton(AF_INET, host, &server_addr.sin_addr) <= 0) {std::cerr << "Invalid address/ Address not supported" << std::endl;close(sock);return;}// 连接到服务器if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {std::cerr << "Connection failed" << std::endl;close(sock);return;}// 发送 HTTP 请求if (send(sock, request, strlen(request), 0) == -1) {std::cerr << "Send failed" << std::endl;close(sock);return;}// 读取响应char buffer[4096] = {0};ssize_t valread;while ((valread = read(sock, buffer, sizeof(buffer))) > 0) {std::cout.write(buffer, valread);}// 关闭连接close(sock);
}int main() {const char* request = "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n";telnet_http_request("www.example.com", 80, request);return 0;
}
代码说明
- 基本的 TCP 客户端:
- 创建一个 TCP 套接字,连接到指定的服务器地址和端口。
- 发送一条消息给服务器,并接收服务器的响应。
- 最后关闭套接字。
- 使用 TELNET 访问 HTTP 服务:
- 创建一个 TCP 套接字,连接到 HTTP 服务器。
- 发送一个 HTTP 请求给服务器。
- 循环读取服务器的响应并输出,直到没有更多数据。
- 最后关闭套接字。
需要注意的是,在实际应用中,还需要处理更多的错误情况和异常,以确保程序的健壮性。
相关文章:
HTTP FTP SMTP TELNET 应用协议
1. 标准和非标准的应用协议 标准应用协议: 由标准化组织(如 IETF,Internet Engineering Task Force)制定和维护,具有广泛的通用性和互操作性。这些协议遵循严格的规范和标准,不同的实现之间可以很好地进行…...
百度搜索全面接入DeepSeek-R1满血版:AI与搜索的全新融合
不等了,就是现在!百度搜索全量接入DeepSeek-R1满血版 百度搜索已正式全量接入DeepSeek-R1满血版,在宣布“将接入”仅过了24小时后。 就在宣布“将接入”仅24小时后,百度搜索 已正式全量接入 DeepSeek-R1满血版!得益于…...
《DeepSeek技术:开启工业互联网低成本开发新时代》
在工业互联网蓬勃发展的当下,企业数字化转型的需求日益迫切。然而,高昂的应用开发成本却如同拦路虎,阻碍着众多企业的前进步伐。此时,DeepSeek技术的出现,为工业互联网应用开发带来了新曙光,凭借其独特优势…...
深入浅出TypedArray:网络数据处理、WebGPU与加密实战
JavaScript的TypedArray是现代Web开发中处理二进制数据的利器。本文将结合网络数据传输、WebGPU编程和简单加密算法三个实战场景,带你领略TypedArray的强大能力。 一、TypedArray基础认知 TypedArray家族包括Int8Array、Uint16Array、Float32Array等11种视图类型&a…...
nordic(nrf52832、nrf52840)如何使用SES(SEGGER Embedded Studio)编辑编译工程?
nordic官方例程中一般都会给出好几个不同的编译环境供用户选择,一般是 keil工程、armgcc工程、IAR工程、ses工程等。 一、segger embedded studio如何添加工程.h头文件? 1)首先打开options 2)下拉选中common 3)找到common下的Pre…...
LabVIEW利用CANopen的Batch SDO写入
本示例展示了如何通过CANopen协议向设备写入Batch SDO(批量服务数据对象)。Batch SDO允许用户在一次操作中配置多个参数,适用于设备的批量配置和参数设置。此方法能够简化多个参数的写入过程,提高设备管理效率。 主要步骤…...
P11071 「QMSOI R1」 Distorted Fate Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作分两种: modify ( l , r , x ) \operatorname{modify}(l,r,x) modify(l,r,x):对每个 i ∈ [ l , r ] i \in [l,r] i∈…...
WebSocket在分布式环境中的局限性及解决方案
WebSocket 在分布式环境中存在一些局限性,特别是当系统需要扩展多个服务实例时,单个 WebSocket 连接的管理和消息推送就变得比较复杂。因此,必须采取一些额外的措施来确保 WebSocket 能在多个服务实例之间正确工作。 WebSocket 在分布式环境…...
Flutter 跳转后不允许返回
如果在 Flutter 中使用 Navigator.pushNamed(context, /),默认情况下它会将新的页面压入栈中,这样用户可以按返回键返回上一页。但如果你不想让用户返回,而是直接跳转到 / 并清除导航栈,可以使用 pushReplacementNamed 或 pushNam…...
spconv 安装测试
pip install spconv 报错: File "/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py", line 1736, in _wrapped_call_impl return self._call_impl(*args, **kwargs) File "/usr/local/lib/python3.10/dist-packages/torch/nn/modules/mod…...
关于es6-module的语法
ES6(ECMAScript 2015)引入了模块化的概念,旨在使 JavaScript 更加模块化、可维护和可重用。ES6 模块允许我们在不同的文件中组织和管理代码,使得不同模块之间的依赖关系更加清晰。 1. 导出(Export) 1.1 命…...
python旅游推荐系统+爬虫+可视化(协同过滤算法)
✅️基于用户的协同过滤算法 ✅️有后台管理 ✅️2w多数据集 这个旅游数据分析推荐系统采用了Python语言、Django框架、MySQL数据库、requests库进行网络爬虫开发、机器学习中的协同过滤算法、ECharts数据可视化技术,以实现从网站抓取旅游数据、个性化推荐和直观展…...
【弹性计算】IaaS 和 PaaS 类计算产品
《弹性计算产品》系列,共包含以下文章: 云服务器:实例、存储、网络、镜像、快照容器、裸金属云上运维IaaS 和 PaaS 类计算产品 😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀…...
视频转序列帧
视频转序列帧 介绍操作总结 介绍 这篇文章不是单独讲视频转序列帧所有的方法,这里是针对我后面要做序列帧动画优化的一个工具篇幅。这里我用的premiere Pro 2020下面会讲方法简称pr。 操作 打开pr点击新建项目 输入名称点击确认 将需要转换的视频导入到媒体浏览…...
大模型应用怎么学习,在哪里实现开发:Dify、AnyThingLLM、LangFlow
大模型应用怎么学习,在哪里实现开发 目录 大模型应用怎么学习,在哪里实现开发Dify、AnyThingLLM、LangFlow的官网地址及使用方法DifyAnyThingLLMLangFlowDify、AnyThingLLM、LangFlow是什么怎么使用DifyAnyThingLLMLangFlowDify、AnyThingLLM、LangFlow名字的含义Dify、AnyTh…...
LLM有哪些可控超参数
LLM有哪些可控超参数 目录 LLM有哪些可控超参数生成控制类采样相关类推理优化类惩罚类其他类计算资源与批量处理类上下文与Token相关类内存相关类生成控制类 以流式返回对话响应:指模型在生成回复时,是否以逐字或逐句的流式方式返回给用户,而不是等全部生成完再返回,能提升…...
C++共享指针实战
需求: 有三个类,分别是A,B, R。在B类里new 了一个R的智能指针, 这个R的生命周期和B相同。同时A类也存了一个B中存放关于R的智能指针。B销毁同时A指向R的指针也失效,并调用R的析构函数,如何实现 #include <iostream…...
算法分析—— 《归并排序》
《排序数组》 题目描述: 给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。 示例 1: 输入:nums [5,2…...
SpringBoot启动时报错:cannot use an unresolved DNS server address: I:53
报错如下: 2025-02-17 13:59:41.374 [main] ERROR org.springframework.boot.SpringApplication:835 - Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name mySwaggerResourceProvider def…...
AI进展不止于基准:深度解析Grok 3的局限
基准测试长期以来一直是AI评估的基石,但任何认真的AI科学家都知道它们是可以被“游戏化”的。 我曾经详细写过这个问题,甚至LMsys也不得不调整其盲测格式——将Grok 3用不同的标签代替,而不仅仅是隐藏品牌——以减少品牌偏见。 高能力AI,尤其是像GPT-4级别的模型,或那些依…...
物联网技术赋能预测性维护的深度剖析与前景展望
一、引言 1.1 研究背景与意义 随着信息技术的飞速发展,物联网技术已逐渐渗透到各个行业领域,成为推动产业变革和创新的重要力量。物联网通过将各种设备、物品与互联网连接,实现数据的采集、传输和交互,为各行业带来了前所未有的智能化和自动化水平提升。在工业领域,设备…...
Python变量作用域250218
函数调用时,会创建自己的独有的作用域作用域是以函数为作用域的而且使用条件语句,可能让定义一些变量的代码运行,从而创建其内部变量,如果定义条件不成立,这些变量就不会被创建并被使用变量只要在函数中出现࿰…...
SQL Server 运算符优先级
在 SQL Server 中,运算符的优先级决定了在没有使用括号明确指定计算顺序时,运算符的执行顺序。 运算符优先级列表 括号 () 一元运算符 (正号)-(负号)~(按位取反) 乘法、除法和取模…...
Miniconda + VSCode 的Python环境搭建
目录: 安装 VScode 安装 miniconda 在VScode 使用conda虚拟环境 运行Python程序 1.安装 vscode 编辑器 官网链接:Visual Studio Code - Code Editing. Redefined 下载得到:,双击安装。 安装成功…...
AI提示词进阶:RTGO与CO-STAR框架实战指南
掌握提示词设计是解锁AI生产力的关键。本文将深入解析两大顶尖框架RTGO与CO-STAR,通过程序员视角拆解技术原理,配合真实案例演示如何根据场景精准选型。 一、框架定位与技术特性对比 维度RTGO框架CO-STAR框架架构四层递进式结构六维网状结构响应速度0.8…...
【python】4_异常
目录 一、异常处理 1、异常捕获 基本捕获语法: 捕获指定异常: 捕获多个异常: 捕获所有异常: 异常else & finally: 2、异常的传递性 二、模块 模块的导入方式 1、语法 2、as 定义别名 一、异常处理 1、异常…...
Python Spider
Python Spider,即Python爬虫,是一种使用Python编程语言编写的自动化程序,用于从互联网上抓取数据。这些程序通常模拟人类用户的网络行为,如访问网页、提交表单、点击链接等,以收集所需的信息。Python爬虫广泛应用于数据…...
防御保护选路练习
拓扑 配置 IP的基本配置 r2 [R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip add 12.0.0.2 255.255.255.0 [R2]int g0/0/2 [R2-GigabitEthernet0/0/2]ip add 210.1.1.254 255.255.255.0 [R2-GigabitEthernet0/0/2]int g0/0/1 [R2-GigabitEthernet0/0/1]ip add 200.1.1.254 255.…...
AI性能极致体验:通过阿里云平台高效调用满血版DeepSeek-R1模型
前言 解决方案链接: https://www.aliyun.com/solution/tech-solution/deepseek-r1-for-platforms?utm_contentg_1000401616 DeepSeek是近期爆火的开源大语言模型(LLM),凭借其强大的模型训练和推理能力,受到越来越多…...
Windows本地部署DeepSeek
文章目录 一、准备工作1、准备服务器2、准备APP 二、部署deepseek-r11、脚本部署2、脚本部署 三、ChatBox集成 一、准备工作 1、准备服务器 本案例使用Windows电脑 2、准备APP Download Ollama Download Chatbox 二、部署deepseek-r1 1、脚本部署 双击安装完Ollama,默认…...
