网络编程

Lua语言的网络编程 Lua是一种轻量级的、高级的脚本语言,最早由巴西的天主教大学(PUC-Rio)于1993年开发。Lua的设计初衷是作为一种嵌入式语言,易于扩展和与其他语言互操作。Lua的语法简单易懂,支持多种编程范式,包括过程式、命令式和函数式编程。Lua语言因其轻量、灵活的特性,适合用于网络编程。在本文中,我们介绍了Lua语言的基本网络编程知识,包括Socket编程、数据传输协议,以及几个常用的网络库。通过实践案例,演示了如何使用Lua进行HTTP请求和创建Web服务。 阅读详情

网络编程

1. 概述

通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络。在操作系统、网络管理软件及网络通信协议的管理和协调下,可以实现计算机之间的资源共享和信息的传递。
网络编程是指用来实现网络互联的不同计算机上运行的程序间可以进行数据交换。对我们来说即如何用编程语言 java 实现计算机网络中不同计算机之间的通信。

2. 网络通信三要素(IP地址、端口号、传输协议)

IP 地址

网络中计算机的唯一标识;
32bit(4 字节),一般用“点分十进制”表示,如 192.168.1.158;
IP 地址=网络地址+主机地址 可分类:
A 类:第 1 个 8 位表示网络地址。剩下的 3 个 8 位表示主机地址
B 类:前 2 个 8 位表示网络地址。剩下的 2 个 8 位表示主机地址
C 类:前 3 个 8 位表示网络地址。剩下的 1 个 8 位表示主机地址
D 类地址用于在 IP 网络中的组播
E 类地址保留作研究之用。

端口号

用于标识进程的逻辑地址,不同进程的标识;
有效端口:0-65535,其中 0-1024 系统使用或保留端口。

传输协议

通讯的规则
常见协议: UDP(用户数据报协议)、TCP(传输控制协议)

  • UDP
    • 将数据及数据源和目的封装成数据包中 , 不需要建立连接
    • 每个数据报的大小限制在64K内
    • 因无连接 , 是不可靠协议
    • 不需要建立连接 , 速度快
  • TCP
    • 建立连接 , 形成传输数据的通道
    • 在连接中进行大数据量传输
    • 通过三次握手完成连接 , 是可靠协议
    • 必须建立连接 , 效率会降低

3. 网络模型

计算机网络之间以何种规则进行通信,就是网络模型所研究的问题。

网络模型一般是指 OSI 七层参考模型和 TCP/IP 五层参考模型。

在这里插入图片描述

​ 每一层实现各自的功能和协议,并且都为上一层提供业务功能。为了提供这种业务功能,下一层将上一层中的数据并入到本层的数据域中,然后通过加入报头或报尾来实现该层业务功能,该过程叫做数据封装。用户的数据要经过一次次包装,最后转化成可以在网络上传输的信号,发送到网络上。当到达目标计算机后,再执行相反的数据拆包过程。

在这里插入图片描述

物理层:
​ 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。主要作用是将数据最终编码为用 0、1 标识的比特流,通过物理介质传输。这一层的数据叫做比特。
数据链路层:
​ 主要将接收到的数据进行 MAC 地址(网卡地址)的封装与解封装。常把这一层的数据叫做帧。这一层常工作的设备是交换机。
网络层:
​ 主要将接收到的数据进行 IP 地址的封装与解封装。常把这一层的数据叫做数据包。这一层设备是路由器。
传输层:
​ 定义了一些数据传输的协议和端口号。主要将接收的数据进行分段和传输,到达目的地址后在进行重组。常把这一层的数据叫做段。
会话层:
​ 通过传输层建立数据传输的通路。主要在系统之间发起会话或者接收会话请求。
表示层:
​ 主要进行对接收数据的解释、加密与解密、压缩与解压缩。确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
应用层:
​ 主要是为一些终端应用程序提供服务。直接面对着用户的。

4. Socket 机制

4.1 Socket 概述

Socket,又称为套接字,用于描述IP 地址和端口。应用程序通常通过 socket向网络发出请求或者应答网络请求。Socket 就是为网络编程提供的一种机制:
​ 通信两端都有 socket;
​ 网络通信其实就是 socket 之间的通信;
​ 数据在两个 socket 之间通过 IO 传输。
​ 网络编程也称作为 Socket 编程,套接字编程。
​ Socket 通信是Client/Server 模型。

4.2 基于 UDP 协议的 Socket 通信(了解即可)

在这里插入图片描述

在这里插入图片描述

4.3 基于 TCP 协议的 Socket 通信

服务端
​ 核心 API:ServerSocket
​ 流程:
​ 创建 ServerSocket 服务,然后绑定在服务器的 IP 地址和端口
​ 监听连接请求
​ 接受请求,建立了 TCP 连接
​ 获取输入流读取数据,并显示
​ 释放资源

//建立服务端 socket 服务,并且监听一个端口
	ServerSocket ss = new ServerSocket(13131);
//监听连接
Socket s = ss.accept();
//获取输入流,读取数据
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
InputStream inputStream = s.getInputStream();
byte[] bys = new byte[1024];
int len = inputStream.read(bys);
System.out.println(new String(bys, 0, len));
//关闭客户端
s.close();
//关闭服务端,一般服务端不关闭
ss.close();

客户端
​ 核心 API:Socket
​ 流程: 创建客户端 socket 对象
​ 向服务端请求建立 tcp 连接
​ 从 tcp 连接中获取输出流,写数据
​ 释放资源

//创建客户端的 socket 服务,指定目的主机和端口
Socket s = new Socket("127.0.0.1", 13131);
//通过 socket 获取输出流,写数据
OutputStream outputStream = s.getOutputStream();
outputStream.write("hello ,this is tcp?".getBytes());
//释放资源
s.close();

在这里插入图片描述

5. IO 通信模型

网络通信的本质是网络间的数据 IO。只要有 IO,就会有阻塞或非阻塞的问题,无论这个 IO 是网络的,还是硬盘的。原因在于程序是运行在系统之上的,任何形式的 IO 操作发起都需要系统的支持。

5.1 BIO (阻塞模式)

BIO 即 blocking IO,是一种阻塞式的 IO。
jdk1.4 版本之前 Socket 即 BIO 模式。
BIO 的问题在于 accept()、read()的操作点都是被阻塞的。
服务器线程发起一个 accept 动作,询问操作系统是否有新的 socket 信息从端口 X 发送过来。注意,是询问操作系统。如果操作系统没有发现有 socket 从指定的端口 X 来,那么操作系统就会等待。这样 serverSocket.accept()方法就会一直等待。这就是为什么 accept()方法为什么会阻塞。
如果想让 BIO 同时处理多个客户端请求,就必须使用多线程,即每次 accept阻塞等待来自客户端请求,一旦收到连接请求就建立通信,同时开启一个新的线程来处理这个套接字的数据读写请求,然后立刻又继续 accept 等待其他客户端连接请求,即为每一个客户端连接请求都创建一个线程来单独处理。

5.2 NIO (非阻塞模式)

NIO 即 non-blocking IO,是一种非阻塞式的 IO。jdk1.4 之后提供。
NIO 三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器)。
​ Buffer :容器对象,包含一些要写入或者读出的数据。在 NIO 库,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的;在写入数据时,也是写入到缓冲区中。任何时候访问 NIO 中的数据,都是通过缓冲区进行操作。
​ Channel :通道对象,对数据的读取和写入要通过 Channel,它就像水管一样。通道不同于流的地方就是通道是双向的,可以用于读、写和同时读写操作。Channel 不会直接处理字节数据,而是通过 Buffer 对象来处理数据。
​ Selector:多路复用器,选择器。提供选择已经就绪的任务的能力。Selector会不断 轮询注册在其上的 Channel,如果某个 Channel 上面发生读或者写事件,这个 Channel 就处于就绪状态,会被 Selector 轮询出来,进行后续的 I/O 操作。
​ 这样服务器只需要一两个线程就可以进行多客户端通信。

5.3 阻塞/ 非阻塞、同步/ 非同步

​ 阻塞 IO 和非阻塞 IO这两个概念是程序级别的。主要描述的是程序请求操作系统 IO 操作后,如果 IO 资源没有准备好,那么程序该如何处理的问题:前者等待;后者继续执行(并且使用线程一直轮询,直到有 IO 资源准备好了)。

在这里插入图片描述
在这里插入图片描述

同步 IO 和非同步 IO,这两个概念是操作系统级别的。主要描述的是操作系统在收到程序请求 IO 操作后,如果 IO 资源没有准备好,该如何响应程序的问题:前者不响应,直到 IO 资源准备好以后;后者返回一个标记(好让程序和自己知道以后的数据往哪里通知),当 IO 资源准备好以后,再用事件机制返回给程序。
​ 权威参考:《UNIX 网络编程:卷一》第六章——I/O 复用

在这里插入图片描述
任何IO都是由程序和系统参与的

前提:都是IO资源没有准备好

  • 站在程序的角度看
    • 继续等 阻塞IO
    • 不等 用线程不断轮询 待准备好返回继续做 非阻塞IO
  • 站在操作系统的角度看
    • 如果不响应程序 同步IO
    • 如果返回标记 待数据准备好你去这里处理 非同步IO

6. RPC

6.1 什么是 RPC

RPC(Remote Procedure Call Protocol)远程过程调用协议。通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个过程或函数,就像调用本地应用程序中的一样。
正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

6.2 RPC 主要 主要 特质

​ RPC 是协议:协议意味着规范。目前典型的 RPC 实现包括:Dubbo、Thrift、Hetty 等。但这些实现往往都会附加其他重要功能,例如 Dubbo 还包括了服务管理、访问权限管理等功能。
​ 网络协议和网络 IO 模型对其透明:既然 RPC 的客户端认为自己是在调用本地对象。那么传输层使用的是 TCP/UDP 还是 HTTP 协议,又或者是一些其他的网络协议它就不需要关心了。既然网络协议对其透明,那么调用过程中,使用的是哪一种网络 IO 模型调用者也不需要关心。

​ 信息格式对其透明:远程调用过程中,需要传递一些参数,并且会返回一个调用结果。至于这些参数会以某种信息格式传递给网络上的另外一台计算机,这个信息格式是怎样构成的,调用方是不需要关心的。
​ 跨语言能力:对于调用方来说,不知道也无需知道远程的程序使用的是什么
语言运行的,无论服务器方使用的是什么语言,本次调用都应该成功,并且返回
值也应该按照调用方程序语言所能理解的形式进行描述。

6.3 RPC 原理

​ 实现 RPC 的程序包括 5 个部分:User、User-stub、RPCRuntime、Server-stub、Server。在这里插入图片描述

​ user 就是发起 RPC 调用的 client ,当 user 想发起一个远程调用时,它实际是通过本地调用 user-stub。 user-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。远端 RPCRuntim 实例收到请求后交给 server-stub 进行解码后发起本地端调用,调用结果再返回给 user 端。
​ stub:为屏蔽客户调用远程主机上的对象,必须提供某种方式来模拟本地对
象,这种本地对象称为存根(stub),存根负责接收本地方法调用,并将它们委派
给各自的具体实现对象

MATLAB语言的网络编程 网络编程是指为网络服务和应用开发程序的过程,其主要包括客户端和服务器的通信。HTTP编程:用于Web开发,通过浏览器与服务器进行交互。Socket编程:通过底层的网络协议进行数据传输,适用于需要实时数据交换的应用。Web服务:使用SOAP或REST等协议提供服务。MATLAB提供了一系列工具和函数,使得网络编程变得相对简单。 阅读详情

相关推荐

XGBoost与Embedding混合建模实战解析

在机器学习领域,特征工程与模型融合是提升预测性能的关键技术。Embedding技术通过将高维稀疏特征(如文本、ID类数据)转化为低维稠密向量,有效捕获语义关联;而XGBoost作为强大的集成学习算法,擅长处理结构化特征并进行自动特征组合。两者结合的混合架构(如Semantic Boosted Trees)在金融风控和推荐系统等场景中展现出显著优势,尤其在处理用户行为序列、商品ID等复杂特征时,相比传统方法能获得更好的模型效果。本文通过电商推荐和金融反欺诈等案例,详解如何实现Embedding+XGBoost

weixin_28718641的博客 325

【网络编程】网络编程 和 Socket 套接字认识

为什么需要网络编程,什么是网络编程,Socket 套接字的简要认识

bit me的博客 3083

Oracle-如何修复undo坏快

undo出现坏快,导致数据库宕机,无法启动

qqqyyy0422的博客 570

网络编程是什么

对于初学者,或者没有接触过网络编程的程序员,会觉得网络编程涉及的知识很高深,很难,其实这是一种误解,当你的语法熟悉以后,其实基本的网络编程现在已经被实现的异常简单了。 网络编程是什么 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据。 现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。 在网络编程中,发起连接程序,也

m0_67392661的博客 3859

智慧楼宇解决方案-全套大合集

智慧楼宇解决方案,楼宇能耗-环境-设备统一管控解决方案。

byte58的博客 2592

Verilog十大基本功2(testbench的设计 文件读取和写入操作 源代码)

需求说明:Verilog设计基础 内容       :testbench的设计 读取文件 写入文件 来自       :时间的诗 十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应。 端口分为 input,output 和 inout 类型产生激励信号的时候, input  对

时间的诗 5万+

Haskell语言的网络编程

Haskell语言的网络编程通过其强大的类型系统、清晰的语法以及丰富的库使得开发者可以高效地构建各种网络应用,从简单的TCP客户端到功能强大的Web服务。本文介绍了Haskell网络编程的基础知识、常用库、基础示例以及进阶应用。随着Haskell社区的不断发展,网络编程领域的库和框架也在不断地更新与扩展。因此,学习Haskell网络编程不仅能够提升个人的编程技能,也助于应对现代开发中的各种挑战。希望本文能够为对Haskell网络编程感兴趣的开发者提供一些启发与帮助。

2401_90086250的博客 1554

SAP交货单增强字段更新实战:手把手教你用BAPI_OUTB_DELIVERY_CHANGE和EXTENSION2参数

本文详细解析了如何使用BAPI_OUTB_DELIVERY_CHANGE和EXTENSION2参数实现SAP交货单增强字段的更新。从增强点SMOD_V50B0001的定位到字段落表的全流程,提供了ABAP代码示例和常见问题排查方法,帮助开发者高效完成交货单自定义字段的集成开发。

weixin_42525637的博客 452

Java网络编程1 - 介绍网络编程、网络编程三要素

IP:设备在网络中的地址,是设备在网络中的唯一标识。端口:应用程序在设备中的唯一标识。协议:连接和数据在网络中传输的规则。IP(Internet Protocol):全称“互联网协议地址”,是分配给上网设备的唯一标识。IP域名,简称“域名”。用于在互联网上识别和定位网站的人类可读的名称。举例:因为人们不可能记具体的IP地址,比如192.168.1.100,而是记域名,比如www.baidu.com。是互联网中用于将域名转换为对应IP地址的分布式命名系统。

casually的博客 1276

4D毫米波雷达天线设计

多种天线布局方案介绍、天线设计要点介绍

5734

基于深度学习的心律失常的自动分类

基于深度学习的心律失常的自动分类 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 心律失常的危害与检测的重要性 心律失常是一种常见的心血管疾病,严重威胁着人们的健康和生命。据统计,全球每年有数百万人因心律失

AI架构师小马 1143

Android 网络编程入门指南

在移动应用开发中,网络编程是一个不可或缺的部分。它允许应用与远程服务器进行数据交换,实现数据的上传和下载。本文将为你提供一个关于Android网络编程的入门指南,帮助你理解基本概念和实现步骤。

Unity打怪升级 2330

水文仿真软件:SWMM (Storm Water Management Model)_(6).地理信息系统(GIS)与SWMM数据交换

地理信息系统(GIS)与SWMM数据交换是水文仿真中的一个重要环节。通过合理的数据准备、导入、导出和校验,可以确保模型的准确性和实用性。本文介绍了使用SWMM GIS Add-on和Python脚本进行数据交换的方法,并提供了一些优化建议和常见问题的解决方案。希望这些内容能帮助读者更好地进行GIS与SWMM的数据交换,提高水文仿真的效率和质量。

kkchenjj的博客 578

【网络编程】Socket网络编程基础

文章目录网络编程概述Socket与TCP UDPSocket TCP演示报文段协议Mac地址IP、端口、远程服务器IPv4IPv6端口远程服务器 网络编程概述 什么是网络编程 网络编程从大的方面说就是对信息的发送到接收 通过操作相应Api调度计算机硬件资源,并利用传输管道(网线)进行数据交换的过程 更为具体的涉及:网络模型、套接字、数据包 网络模型 – 对应关系 具体细节看一看我的 专栏《计算机...

明月沉江春雾晓 3813

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux网络编程

socket()函数用于创建一个新的套接字,并返回套接字的文件描述符。如果套接字创建失败,函数将返回-1。

cyz322649的博客 1358

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Java网络编程详解】

Java网络编程是开发分布式应用程序的重要技能,它通过套接字(Socket)进行数据传输,支持TCP和UDP协议。本文将介绍Java网络编程的基础知识,包括Socket、ServerSocket、TCP通信、UDP通信、常用类和示例代码。网络编程是指在计算机之间通过网络进行数据传输和通信的编程方式。Java提供了强大的java.net包,封装了底层的网络协议,简化了网络编程。:面向连接,可靠传输,保证数据按序到达,适合文件传输、Web通信等。:面向无连接,不可靠但速度快,适合视频通话、广播消息等。

武帝为此的博客 958

【python】python进阶——网络编程

Python网络编程指南:从基础到实践 本文系统介绍了Python网络编程的核心知识。首先阐述了网络编程基础概念,包括IP地址、端口和协议等关键要素。重点讲解了Socket编程,详细展示了TCP/UDP Socket的创建、服务器/客户端工作流程及代码实现。

weixin_51924657的博客 1370

网络编程概述

本文系统梳理了网络编程的核心知识点及其在嵌入式领域的应用。主要内容包括: 网络协议栈分层模型(OSI/TCP/IP)和关键协议原理(TCP/UDP/IP) 应用层协议(HTTP/MQTT等)及网络编程模型(I/O多路复用、异步I/O) 嵌入式网络编程的特殊性:资源受限、多通信方式、实时性要求 嵌入式常用技术:轻量级协议栈(lwIP)、物联网协议(MQTT/CoAP)。

eatbaozi的博客 1245

[网络编程】网络编程的基础使用

在本文中主要讲解了TCP和UDP两个协议之间的区别;同时对UDP网络编程进行了最基础的创建。

Starc_的博客 1262

Java网络编程

Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。

HL031125的博客 1110

网络编程实战

极客时间《网络编程实战》的学习笔记

海里卖咸鱼的博客 1043

C++语言的网络编程

在当今信息技术飞速发展的时代,网络编程已经成为一个不可或缺的技能。无论是开发网络应用、游戏,还是进行数据处理,掌握网络编程的基本概念和技术,都将大大提高一个程序员的能力。本文将介绍C++语言在网络编程中的应用,包括基础概念、常用库、编程实践等内容,希望能帮助读者更好地理解和掌握C++网络编程。

2501_91409238的博客 1013
上一篇: 大数据----【Zookeeper集群搭建】
下一篇: 大数据基础增强----【Zookeeper】
CoderBoom
博客等级 码龄8年 62粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值