网站优化需要哪些工具/全网营销推广 好做吗

网站优化需要哪些工具,全网营销推广 好做吗,专业网站优化哪家好,桂林技术交流站目录 1.前言 2.正文 2.1TCP协议与UDP协议 2.2socket API进行网络编程 2.2.1DatagramPacket类 2.2.1.1发送数据报 2.2.1.2接收数据报 2.2.1.3获取数据报内容 2.2.1.4设置数据报内容 2.2.2DatagramSocket类 2.2.2.1构造方法 2.2.2.2常用方法 2.2.3具体代码与解释 3…


目录

1.前言

2.正文

2.1TCP协议与UDP协议

2.2socket API进行网络编程

2.2.1DatagramPacket类

2.2.1.1发送数据报

2.2.1.2接收数据报

2.2.1.3获取数据报内容

2.2.1.4设置数据报内容

2.2.2DatagramSocket类

2.2.2.1构造方法

2.2.2.2常用方法

2.2.3具体代码与解释

3.小结


1.前言

哈喽大家好吖,今天继续给大家分享计算机网络相关的知识,先讲解传输层两个重要的UDP和TCP协议,再讲解在UDP中通过socket API来进行网络编程。

2.正文

2.1TCP协议与UDP协议

在讲解二者的概念与对比之前,先提前介绍几个涉及到的概念:

有连接/无连接:指的是通信的A和B两端是否互相保留对方的信息(即彼此之间是否知道是谁和它建立连接)。

可靠传输/不可靠传输:在网络上,很容易出现丢包这种情况,因为光信号和电信号都可能受到外界干扰,如果在传输中识别到某些出错的数据,打包丢掉,保证正常数据传输,这个叫做可靠传输,反之只管发送,不管中间的错误就是不可靠传输。

面向字节流/面向数据包:面向字节流,读写数据的时候,是以字节为单位面向数据报,读写数据的时候,以一个数据报为单位(不是字符)。

全双工/半双工:一个通信链路,支持双向通信(能读,也能写) / 一个通信链路,只支持单向通信~~(要么读,要么写)

讲解完以上概念,正文就可以顺利开始~ 

TCP(传输控制协议)和UDP(用户数据报协议)是互联网中最重要的两种传输层协议,负责在应用程序之间传输数据。它们在设计目标、工作原理和应用场景上有显著差异。以下是详细的对比和解析:

TCP

特点:

  • 面向连接:通信前需通过三次握手建立可靠连接,结束时通过四次挥手释放连接。

  • 可靠传输:通过确认应答(ACK)、超时重传、数据排序、流量控制和拥塞控制确保数据完整、有序、无丢失。

  • 全双工通信:支持双向数据流传输。

  • 字节流模式:数据被看作无结构的字节流,由TCP自行分割和重组。


优点:

  • 数据可靠性高,适合文件传输、网页浏览等场景。

  • 自动处理数据分片、重组和错误恢复。

缺点:

  • 建立和释放连接的开销大。

  • 传输延迟较高。


UDP

特点:

  • 无连接:直接发送数据,无需建立连接。

  • 不可靠传输:不保证数据到达、顺序或完整性。

  • 数据报模式:每个数据包独立处理,保留边界。

  • 全双工通信:支持双向数据流传输。


优点:

  • 传输速度快、延迟低。

  • 资源占用少,适合实时性要求高的场景。

  • 支持广播和多播(一对多通信)。

缺点:

  • 不保证数据可靠性,可能丢失或乱序。

2.2socket API进行网络编程

接下来,就到了咱们的代码环节了,我们将利用socket API来创建一个本地的UDP回显服务器。那么何为回显服务器呢?

UDP回显服务器是一种简单的网络服务,它接收客户端发送的UDP数据报,并将相同的数据报原样返回给客户端,即请求和响应相同。

2.2.1DatagramPacket类

在开始创建一个本地的UDP回显服务器之前,需要先介绍一下我们要使用的DatagramPacket类:

DatagramPacket类用于封装UDP数据报。它表示一个UDP数据报的结构,包括数据内容、目标地址、目标端口、数据长度等信息。

2.2.1.1发送数据报
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
  • buf:要发送的数据,存储在字节数组中。

  • length:要发送的数据的长度。

  • address:目标主机的 IP 地址,类型为 InetAddress

  • port:目标主机的端口号。


2.2.1.2接收数据报
DatagramPacket(byte[] buf, int length)
  • buf:用于存储接收到的数据的字节数组。

  • length:字节数组的长度,即最大可接收的数据长度。


2.2.1.3获取数据报内容
  • getData():返回数据报的数据,类型为 byte[]

  • getLength():返回数据报的实际数据长度。

  • getAddress():返回发送方的 IP 地址(接收时使用)。

  • getPort():返回发送方的端口号(接收时使用)。


2.2.1.4设置数据报内容
  • setData(byte[] buf):设置数据报的数据。

  • setLength(int length):设置数据报的长度。

  • setAddress(InetAddress address):设置目标地址。

  • setPort(int port):设置目标端口。

2.2.2DatagramSocket类

DatagramSocket类用于发送和接收UDP数据报。它表示一个UDP端点,可以绑定到本地端口,并通过网络发送和接收数据报。

2.2.2.1构造方法
  • DatagramSocket():系统随机分配一个未使用的本地端口。
  • DatagramSocket(int port):绑定指定的本地端口。
  • DatagramSocket(int port, InetAddress address):绑定到指定的本地端口和地址。

2.2.2.2常用方法
  • void send(DatagramPacket p):发送数据报。
  • void receive(DatagramPacket p):接收数据报。
  • void close():关闭套接字。

2.2.3具体代码与解释

下面是具有详细的注释的代码与讲解:

UdpEchoServer:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpEchoServer {private DatagramSocket socket = null;public UdpEchoServer(int port) throws SocketException {// 指定了一个固定端口号, 让服务器来使用.socket = new DatagramSocket(port);}public void start() throws IOException {// 启动服务器System.out.println("服务器启动");while (true) {// 循环一次, 就相当于处理一次请求.// 处理请求的过程, 典型的服务器都是分成三个步骤的.// 1. 读取请求并解析.//    DatagramPacket 表示一个 UDP 数据报. 此处传入的字节数组, 就保存 UDP 的载荷部分.DatagramPacket requestPacket = new DatagramPacket(new byte[4096], 4096);socket.receive(requestPacket);//    把读取到的二进制数据, 转成字符串. 只是构造有效的部分.String request = new String(requestPacket.getData(), 0, requestPacket.getLength());// 2. 根据请求, 计算响应. (服务器最关键的逻辑)//    但是此处写的是回显服务器. 这个环节相当于省略了.String response = process(request);// 3. 把响应返回给客户端//    根据 response 构造 DatagramPacket, 发送给客户端.//    此处不能使用 response.length()DatagramPacket responsePacket = new DatagramPacket(response.getBytes(), response.getBytes().length,requestPacket.getSocketAddress());//    此处还不能直接发送. UDP 协议自身没有保存对方的信息(不知道发给谁)//    需要指定 目的 ip 和 目的端口.socket.send(responsePacket);// 4. 打印一个日志System.out.printf("[%s:%d] req: %s, resp: %s\n", requestPacket.getAddress().toString(), requestPacket.getPort(),request, response);}}// 后续如果要写别的服务器, 只修改这个地方就好了.// 不要忘记, private 方法不能被重写. 需要改成 publicpublic String process(String request) {return request;}public static void main(String[] args) throws IOException {UdpEchoServer server = new UdpEchoServer(9090);server.start();}
}

 UdpEchoClient:

import java.io.IOException;
import java.net.*;
import java.util.Scanner;public class UdpEchoClient {private DatagramSocket socket = null;// UDP 本身不保存对端的信息, 就自己的代码中保存一下private String serverIp;private int serverPort;// 和服务器不同, 此处的构造方法是要指定访问的服务器的地址.public UdpEchoClient(String serverIp, int serverPort) throws SocketException {this.serverIp = serverIp;this.serverPort = serverPort;socket = new DatagramSocket();}public void start() throws IOException {Scanner scanner = new Scanner(System.in);while (true) {// 1. 从控制台读取用户输入的内容.System.out.println("请输入要发送的内容:");if (!scanner.hasNext()) {break;}String request = scanner.next();// 2. 把请求发送给服务器, 需要构造 DatagramPacket 对象.//    构造过程中, 不光要构造载荷, 还要设置服务器的 IP 和端口号DatagramPacket requestPacket = new DatagramPacket(request.getBytes(), request.getBytes().length,InetAddress.getByName(serverIp), serverPort);// 3. 发送数据报socket.send(requestPacket);// 4. 接收服务器的响应DatagramPacket responsePacket = new DatagramPacket(new byte[4096], 4096);socket.receive(responsePacket);// 5. 从服务器读取的数据进行解析, 打印出来.String response = new String(responsePacket.getData(), 0, responsePacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {UdpEchoClient client = new UdpEchoClient("127.0.0.1", 9090);client.start();}
}

 

实现核心思路:

  1. 服务器端

    • 打开一个UDP套接字(Socket)。

    • 绑定到一个指定的端口,等待客户端发送数据。

    • 接收客户端发送的UDP数据报。

    • 将接收到的数据报原样发送回客户端。

    • 重复上述过程,直到服务器关闭。

  2. 客户端

    • 打开一个UDP套接字。

    • 向服务器的指定端口发送数据报。

    • 接收服务器返回的数据报。

    • 比较发送和接收的数据是否一致,以验证数据传输的完整性。

    • 关闭套接字。

3.小结

今天的分享到这里就结束了,喜欢的小伙伴不要忘记点点赞点个关注,你的鼓励就是对我最大的支持,加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Oracle专栏】sqlplus显示设置+脚本常用显示命令

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.内容概述 本文主要针对oracle 运维中常用知识点进行整理,包括: 1)sqlplus模式下,为了方便查询设置相应的行宽、列宽、行数。…

在一台win10专业版设备上使用docker的怪现象

这台设备上,wsl环境无法直接安装docker,必须要在宿主机安装Docker Desktop.然后,在wsl运行前,要先启动docker desktop,否则,你看不到你自己创建的映像。 然后如果没有docker desktop加持,你在尝…

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(五) 实现登录功能

1.登录页面 完善登录页面 和注册差不多 直接copy signUpPage 内容 再稍微修改下 import { useState } from "react"; import { useAuthStore } from "../store/useAuthStore"; import { MessageSquare,Mail,Lock,Eye, EyeOff,Loader2} from "lucide…

Spring Boot电影评论网站系统设计与实现

随着互联网和娱乐产业的发展,电影评论网站逐渐成为人们分享观影体验、交流影评的重要平台。本文将介绍一个基于Spring Boot框架开发的电影评论网站系统的功能设计与实现方案。 功能模块概述 该电影评论网站系统分为管理员模块和用户模块两大核心部分,以…

XFeat:轻量级的深度学习图像特征匹配

一、引言:图像特征匹配的挑战与XFeat的突破 在计算机视觉领域,图像特征匹配是视觉定位(Visual Localization)、三维重建(3D Reconstruction)、增强现实(AR)等任务的核心基础。传统方…

解锁健康密码,拥抱养生生活

在快节奏的现代生活中,健康养生愈发重要,它是我们保持活力、预防疾病、享受美好生活的关键。那究竟如何开启健康养生之旅呢? 合理饮食是养生基石。遵循 “食物多样,谷类为主” 原则,每日摄入谷薯类、蔬菜水果、畜禽鱼蛋…

el-input实现金额输入

需求&#xff1a;想要实现一个输入金额的el-input&#xff0c;限制只能输入数字和一个小数点。失焦数字转千分位&#xff0c;聚焦转为数字&#xff0c;超过最大值&#xff0c;红字提示 效果图 失焦 聚焦 报错效果 // 组件limitDialog <template><el-dialog:visible.s…

30 分钟从零开始入门 CSS

HTML CSS JS 30分钟从零开始入门拿下 HTML_html教程-CSDN博客 30 分钟从零开始入门 CSS-CSDN博客 JavaScript 指南&#xff1a;从入门到实战开发-CSDN博客 前言 最近也是在复习&#xff0c;把之前没写的博客补起来&#xff0c;之前给大家介绍了 html&#xff0c;现在是 CSS 咯…

LabVIEW图像识别抗干扰分析

问题描述 在基于LabVIEW的探针定位系统中&#xff0c;存在两个核心技术难点&#xff1a; 相机畸变导致初始定位误差&#xff1a;非线性畸变使探针无法通过坐标变换直接精确定位&#xff0c;需采用粗定位图像修正的两段式控制策略。 图像识别可靠性不足&#xff1a;复杂背景&a…

【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案

【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案 一、前言 目前应用上架华为AGC平台&#xff0c;都会被要求适配折叠屏设备。目前华为系列的折叠屏手机&#xff0c;有华为 Mate系列&#xff08;左右折叠&#xff0c;华为 Mate XT三折叠&#xff09;&#xff0c;华为Pocket 系列…

SE注意力机制详解:从原理到应用,全面解析Squeeze-and-Excitation模块

Squeeze-and-Excitation (SE) 模块的原理与应用 1. 引言&#xff1a;注意力机制的意义 在深度学习领域&#xff0c;注意力机制&#xff08;Attention Mechanism&#xff09;通过模拟人类视觉的“聚焦”特性&#xff0c;赋予模型动态调整特征重要性的能力。传统卷积神经网络&a…

Python基础大全:Python变量详解

以下是 Python 变量的详细解析&#xff1a; 1. 变量的本质 Python 变量本质上是一个 指向对象的引用&#xff08;类似标签&#xff09;&#xff0c;而不是存储数据的容器。 变量赋值 a 10 时&#xff0c;Python 会创建一个整数对象 10&#xff0c;然后让变量 a 指向这个对象…

数据挖掘工程师的技术图谱和学习路径

数据挖掘工程师的技术图谱和学习路径: 1.基础知识 数据挖掘工程师是负责从大量数据中发现潜在模式、趋势和规律的专业人士。以下是数据挖掘工程师需要掌握的基础知识: 数据库知识:熟悉关系数据库和非关系数据库的基本概念和操作,掌握SQL语言。 统计学基础:了解统计学的基…

UE5 Computer Shader学习笔记

首先这里是绑定.usf文件的路径&#xff0c;并声明是用声明着色器 上面就是对应的usf文件路径&#xff0c;在第一张图进行链接 Shader Frequency 的作用 Shader Frequency 是 Unreal Engine 中用于描述着色器类型和其执行阶段的分类。常见的 Shader Frequency 包括&#xff1a…

解决单元测试 mock final类报错

文章目录 前言解决单元测试 mock final类报错1. 报错原因2. 解决方案3. 示例demo4. 扩展 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0…

2025系统架构师(一考就过):案例之三:架构风格总结

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式&#xff0c;按照软件架构风格&#xff0c;物联网系统属于&#xff08; &#xff09;软件架构风格。 A:层次型 B:事件系统 C:数据线 D:C2 答案&#xff1a;A 解析&#xff1a; 物联网分为多个层次&#xff0…

数据如何安全“过桥”?分类分级与风险评估,守护数据流通安全

信息化高速发展&#xff0c;数据已成为企业的核心资产&#xff0c;驱动着业务决策、创新与市场竞争力。随着数据开发利用不断深入&#xff0c;常态化的数据流通不仅促进了信息的快速传递与共享&#xff0c;还能帮助企业快速响应市场变化&#xff0c;把握商业机遇&#xff0c;实…

华宇TAS应用中间件与统信最新版本操作系统完成兼容互认证

近日&#xff0c;华宇TAS应用中间件与统信服务器操作系统经过技术迭代与优化&#xff0c;在原先UOS V20的基础上完成了UOS V25的兼容互认证。此次认证涵盖了众多主流的国产CPU平台&#xff0c;包括鲲鹏920、飞腾FT2000/64、飞腾腾云S2500等。 经过严格测试&#xff0c;双方产品…

35. Spring Boot 2.1.3.RELEASE 应用监控【监控信息可视化】

在 Spring Boot 2.1.3.RELEASE 中实现监控信息可视化可以通过多种方式&#xff0c;下面为你详细介绍使用 Spring Boot Actuator 结合 Grafana 和 Prometheus 以及使用 Spring Boot Admin 这两种常见方法。 方法一&#xff1a;Spring Boot Actuator Grafana Prometheus 1. 添…

服务器间迁移conda环境

注意&#xff1a;可使用迁移miniconda文件 or 迁移yaml文件两种方式&#xff0c;推荐前者&#xff0c;基本无bug&#xff01; 一、迁移miniconda文件&#xff1a; 拷贝旧机器的miniconda文件文件到新机器: 内网拷贝&#xff1a;scp -r mazhf192.168.1.233:~/miniconda3 ~/ 外…